我正在编写一个删除标点符号和空格的程序,然后测试该字符串是否为回文,为此,我编写了下面的代码。问题是当你输入带有标点符号的字符串(unicode字符49-30和58-66)时,它会删除它们,但用某种类型的隐藏字符替换它们。当我输入" n on"它输出"非"喜欢它应该但是新字符串的长度是4,当它应该是3.什么是这个额外的字符,我该如何摆脱它?
System.out.println("Enter a potential palindrome:");
strOld = scan.nextLine();
int size = strOld.length();
int start = 0;
int noCap = 32;
char[] cArray = new char[size];
while(start<size) {
if((strOld.charAt(start) < 48 && strOld.charAt(start) > 31)||((strOld.charAt(start) < 65 && strOld.charAt(start) > 57))){
start++;
}
else if(strOld.charAt(start) < 90 && strOld.charAt(start) > 64) {
char c = strOld.charAt(start);
c = (char) (c + noCap);
cArray[start] = c;
start++;
}
else {
cArray[start] = strOld.charAt(start);
start++;
}
}
str = new String(cArray);
System.out.println(str);
System.out.println(str.length());
答案 0 :(得分:0)
出现问题的是在代码的开头我将char数组设置为等于原始字符串的大小。 char数组填充了空值,因此如果字符串为“n on”,则从一开始就将char数组的大小设置为4。我将尝试使用ArrayList方法来修复此
int size = strOld.length();
int start = 0;
int noCap = 32;
char[] cArray = new char[size];
答案 1 :(得分:0)
在此代码的开头,您已将字符数组声明为char[] cArray = new char[size];
。此语句初始化一个填充了默认char值'u0000'
的数组。所以当您最终从此数组创建一个String时如果只有3个有效字符,它将转换为长度为4的字符串。
我们可以使用ArrayList作为解决方案。我们可以创建一个角色对象的ArrayList,如下所示。
ArrayList<Character> cArray = new ArrayList<>();
这只会在堆中创建一个空的ArrayList对象。不需要声明ArrayList的大小。重要的是,ArrayList可以动态地改变大小。我们可以使用cArray.add(c);
向它添加元素。
最后要将ArrayList对象转换为String,我们可以使用StringBuilder对象。当我们使用ArrayList时,没有'u0000'
默认值。因此,当您输入n on
时,输出将为non
,长度将为3
。修改后的代码将如下。
System.out.println("Enter a potential palindrome:");
String strOld = scan.nextLine();
int size = strOld.length();
int start = 0;
int noCap = 32;
//char[] cArray = new char[size];
ArrayList<Character> cArray = new ArrayList<>();
while (start < size) {
if ((strOld.charAt(start) < 48 && strOld.charAt(start) > 31) || ((strOld.charAt(start) < 65 && strOld.charAt(start) > 57))) {
start++;
} else if (strOld.charAt(start) < 90 && strOld.charAt(start) > 64) {
char c = strOld.charAt(start);
c = (char) (c + noCap);
cArray.add(c);
start++;
} else {
cArray.add(strOld.charAt(start));
start++;
}
}
StringBuilder result = new StringBuilder(cArray.size());
for (Character c : cArray) {
result.append(c);
}
String str = result.toString();
System.out.println(str);
System.out.println(str.length());