我正在制作一个程序来测试数组中的字符串是否是回文
我试图从一个数组中取出字符串并取出任何空格或其他字符,以便它只是字母或数字。
然后采取"清洁"字符串并将它们存储到一个新数组中
我用这个方法得到的错误是它说第4行的左边需要一个变量,但是我已经把它声明为一个String数组。
这是我到目前为止所做的事情。
for (i = 0; i < dirty.length; i++) {
for (int j = 0; j < dirty[i].length(); j++)
if (Character.isLetterOrDigit(dirty[i].charAt(j))) {
clean[i].charAt(j) = dirty[i].charAt(j);
}
}
编辑:我发现最简单的解决方案是创建一个临时字符串变量,一次添加一个字符,具体取决于它们是字母还是数字。然后转换为小写,然后存储到字符串数组中。以下是已更改的代码:
String clean [] = new String [i]; //存储脏数组具有非空元素的元素数
for (i = 0; i < dirty.length; i++) {
if (dirty[i] != null) // Only copy strings from dirty array if the value of the element at position i is not empty
{
for (int j = 0; j < dirty[i].length(); j++) {
if (Character.isLetterOrDigit(dirty[i].charAt(j)))// take only letters and digits
{
temp += dirty[i].charAt(j);// take the strings from the dirty array and store it into the temp variable
}
}
temp = temp.toLowerCase(); // take all strings and convert them to lower case
clean[i] = temp; // take the strings from the temp variable and store them into a new array
temp = ""; // reset the temp variable so it has no value
}
}
答案 0 :(得分:1)
String clean = dirty.codePoints()
.filter(Character::isLetterOrDigit)
.collect(StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
但是,也可以将replaceAll
与适当的正则表达式一起使用,以生成仅包含字母和数字的新字符串。
取自here:
String clean = dirty.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]", "");
答案 1 :(得分:0)
您无法修改StrIng。他们是不变的。
但是,您可以覆盖数组中的值。写一个方法来清理一个字符串。
for (i = 0; i < dirty.length; i++) {
dirty[i] = clean(dirty[i]);
}
另外,建议您编写一个单独的方法来检查回文[/ p>]
答案 2 :(得分:0)
字符串是不可变的。您可以使用StringBuilder,因为它不是不可变的,您可以修改它。在这种情况下,您可以使用StringBuilder类的void setCharAt(int index, char ch)
函数。
答案 3 :(得分:0)
String.charAt(i)
只返回指定位置的char
。您无法为其分配新值。但您可以将String
更改为char
的数组,然后您可以根据需要进行修改
char[] dirtyTab = dirty.toCharArray();