将数组中的字符串中的字符复制到新数组中

时间:2016-11-10 01:09:16

标签: java arrays string

我正在制作一个程序来测试数组中的字符串是否是回文 我试图从一个数组中取出字符串并取出任何空格或其他字符,以便它只是字母或数字。
然后采取"清洁"字符串并将它们存储到一个新数组中 我用这个方法得到的错误是它说第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
        }
    }

4 个答案:

答案 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();