Java - 反向字符串空错误
Java - Reverse String null error
输入应该像这样显示,例如。
\n
喀山R
\n
6789
\n
NZK462
\n
但是我收到的输出是这样的
kzn462nullnzk
为什么是这样?我该如何解决?
private void btnGenerateActionPerformed(java.awt.event.ActionEvent evt) {
secondname = JOptionPane.showInputDialog("Enter your surname:");
firstname = JOptionPane.showInputDialog("Enter your firstname:");
idno = JOptionPane.showInputDialog("Enter your idno:");
nametag = firstname.substring(0, 1);
initials = secondname + " " + nametag;
int randnum;
do {
randnum = (int) (Math.random() * 900) + 100;
} while (randnum % 2 != 0);
code = secondname.replaceAll("[aeiou || AEIOU](?!\b)", "")+randnum ;
txaDisplay.append(initials + '\n' + idno.substring(6,10) + '\n' + code);
int length = secondname.length();
for (int i = length - 1; i >= 0; i--) {
reverse = reverse + secondname.charAt(i);
}
String end = reverse + code;
txaDisplay.append( reverse);
你为什么不用
new StringBuilder(secondname).reverse().toString()
要扭转你的String
?它更好、更简单、更易于维护。
因为您不想使用 StringBuilder/StringBuffer。
试试这个
String reversedString="";
for(int i=inputString.length-1;i>=0;){
reversedString+=inputString.charAt(i--);
}
- 从源字符串中获取字符数组
- 新建一个相同长度的字符数组
- 从 0 开始迭代到 (sourceStringLength-1)
- 在每次迭代中,获取最后一个字符
从源数组的末尾开始填充新数组
从这个新数组创建一个新字符串
String source = "abcdefg";
char[] chars = source.toCharArray();
char[] reverseChars = new char[source.length()];
int len = source.length();
for(int i= 0; i < len; i++){
reverseChars[i] = chars[len-1-i];
}
String reverse = new String(reverseChars);
System.out.println(reverse);
我认为问题出在你对反向的定义上,也许你有这样的东西:
String reverse;
然后你不初始化你的 "reverse" 所以当你的程序在你的循环中进行第一次连接时,它看起来像这样:
reverse = null + secondname.charAt(i);
空值被转换为字符串,因此它可以在输出中可见。
希望这些信息对您有所帮助。
祝你好运。
输入应该像这样显示,例如。 \n 喀山R \n 6789 \n NZK462 \n
但是我收到的输出是这样的 kzn462nullnzk 为什么是这样?我该如何解决?
private void btnGenerateActionPerformed(java.awt.event.ActionEvent evt) {
secondname = JOptionPane.showInputDialog("Enter your surname:");
firstname = JOptionPane.showInputDialog("Enter your firstname:");
idno = JOptionPane.showInputDialog("Enter your idno:");
nametag = firstname.substring(0, 1);
initials = secondname + " " + nametag;
int randnum;
do {
randnum = (int) (Math.random() * 900) + 100;
} while (randnum % 2 != 0);
code = secondname.replaceAll("[aeiou || AEIOU](?!\b)", "")+randnum ;
txaDisplay.append(initials + '\n' + idno.substring(6,10) + '\n' + code);
int length = secondname.length();
for (int i = length - 1; i >= 0; i--) {
reverse = reverse + secondname.charAt(i);
}
String end = reverse + code;
txaDisplay.append( reverse);
你为什么不用
new StringBuilder(secondname).reverse().toString()
要扭转你的String
?它更好、更简单、更易于维护。
因为您不想使用 StringBuilder/StringBuffer。
试试这个
String reversedString="";
for(int i=inputString.length-1;i>=0;){
reversedString+=inputString.charAt(i--);
}
- 从源字符串中获取字符数组
- 新建一个相同长度的字符数组
- 从 0 开始迭代到 (sourceStringLength-1)
- 在每次迭代中,获取最后一个字符 从源数组的末尾开始填充新数组
从这个新数组创建一个新字符串
String source = "abcdefg"; char[] chars = source.toCharArray(); char[] reverseChars = new char[source.length()]; int len = source.length(); for(int i= 0; i < len; i++){ reverseChars[i] = chars[len-1-i]; } String reverse = new String(reverseChars); System.out.println(reverse);
我认为问题出在你对反向的定义上,也许你有这样的东西:
String reverse;
然后你不初始化你的 "reverse" 所以当你的程序在你的循环中进行第一次连接时,它看起来像这样:
reverse = null + secondname.charAt(i);
空值被转换为字符串,因此它可以在输出中可见。
希望这些信息对您有所帮助。
祝你好运。