Java Arrays.toString() 创建了一个奇怪的字符序列
Java Arrays.toString() creates a strange sequence of characters
我是 Java 的新手,但我在 JavaScript 方面有丰富的经验。我有一个包含 15 个随机字符的生成数组,我想将其转换为字符串(例如,数组 { 0、2、f、B、d、7、A} 被转换为 02fBd7A),但它创建了这个奇怪的字符串人物。这就像它实际上采用数组并将语法直接放入字符串中(例如数组 { 0, 2, f, B, d, 7, A},而不是“02fBd7A”,而是“[ 0, 2, f , B, d, 7, A ]" 作为字符串。我更精通 JavaScript,我知道你可以手动 trim JavaScript 中的字符串,但是在 Java 中有没有更简单的方法来做到这一点?下面的代码(我知道它不能像上面的例子那样生成大写字母,但我认为添加它很简单)。
import java.util.Arrays;
import java.util.Scanner;
public class passwordGen {
public static char Number(char[] array) {
byte random = (byte)(Math.random() * 10);
return array[random];
}
public static char Char(char[] array) {
byte random = (byte)(Math.random() * 26);
return array[random];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final char[] numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
final char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z'
};
float selector;
int length = scanner.nextInt();
char[] passHold = new char[length];
String passFinal;
try {
for (int i = 0; i < length; i++) {
selector = (float)Math.random();
if (selector < 0.5) {
passHold[i] = Number(numbers);
} else {
passHold[i] = Char(alphabet);
}
}
passFinal = Arrays.toString(passHold);
System.out.println(passFinal);
} catch (Exception e) {
System.out.println("An error occurred.");
}
}
}
Arrays.toString
方法创建一个字符串,显示数组中的每个元素。您正在寻找的是接受字符数组的 String
构造函数:
passFinal = new String(passHold);
或者您可以将新选择的字符连接到 passFinal 字符串并跳过中间字符数组。 (您在其中一条评论中提到您想要类似串联的东西。)
String passFinal = "";
try {
for (int i = 0; i < length; i++) {
selector = (float)Math.random();
if (selector < 0.5) {
passFinal += Number(numbers);
} else {
passFinal += Char(alphabet);
}
}
System.out.println(passFinal);
}
可能更好的方法是使用 StringBuilder 及其附加
StringBuilder passFinalSb = new StringBuilder();
try {
for (int i = 0; i < length; i++) {
selector = (float)Math.random();
if (selector < 0.5) {
passFinalSb.append(Number(numbers));
} else {
passFinalSb.append(Char(alphabet));
}
}
String passFinal = passFinalSb.toString();
System.out.println(passFinal);
}
我是 Java 的新手,但我在 JavaScript 方面有丰富的经验。我有一个包含 15 个随机字符的生成数组,我想将其转换为字符串(例如,数组 { 0、2、f、B、d、7、A} 被转换为 02fBd7A),但它创建了这个奇怪的字符串人物。这就像它实际上采用数组并将语法直接放入字符串中(例如数组 { 0, 2, f, B, d, 7, A},而不是“02fBd7A”,而是“[ 0, 2, f , B, d, 7, A ]" 作为字符串。我更精通 JavaScript,我知道你可以手动 trim JavaScript 中的字符串,但是在 Java 中有没有更简单的方法来做到这一点?下面的代码(我知道它不能像上面的例子那样生成大写字母,但我认为添加它很简单)。
import java.util.Arrays;
import java.util.Scanner;
public class passwordGen {
public static char Number(char[] array) {
byte random = (byte)(Math.random() * 10);
return array[random];
}
public static char Char(char[] array) {
byte random = (byte)(Math.random() * 26);
return array[random];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final char[] numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
final char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z'
};
float selector;
int length = scanner.nextInt();
char[] passHold = new char[length];
String passFinal;
try {
for (int i = 0; i < length; i++) {
selector = (float)Math.random();
if (selector < 0.5) {
passHold[i] = Number(numbers);
} else {
passHold[i] = Char(alphabet);
}
}
passFinal = Arrays.toString(passHold);
System.out.println(passFinal);
} catch (Exception e) {
System.out.println("An error occurred.");
}
}
}
Arrays.toString
方法创建一个字符串,显示数组中的每个元素。您正在寻找的是接受字符数组的 String
构造函数:
passFinal = new String(passHold);
或者您可以将新选择的字符连接到 passFinal 字符串并跳过中间字符数组。 (您在其中一条评论中提到您想要类似串联的东西。)
String passFinal = "";
try {
for (int i = 0; i < length; i++) {
selector = (float)Math.random();
if (selector < 0.5) {
passFinal += Number(numbers);
} else {
passFinal += Char(alphabet);
}
}
System.out.println(passFinal);
}
可能更好的方法是使用 StringBuilder 及其附加
StringBuilder passFinalSb = new StringBuilder();
try {
for (int i = 0; i < length; i++) {
selector = (float)Math.random();
if (selector < 0.5) {
passFinalSb.append(Number(numbers));
} else {
passFinalSb.append(Char(alphabet));
}
}
String passFinal = passFinalSb.toString();
System.out.println(passFinal);
}