22

我正在尝试编写一种方法,从 Java 中删除所有非字母字符String[],然后将字符串转换为小写字符串。我尝试使用正则表达式将所有非字母字符的出现替换为 .""但是,我得到的输出无法这样做。这是代码

static String[] inputValidator(String[] line) {
    for(int i = 0; i < line.length; i++) {
       line[i].replaceAll("[^a-zA-Z]", "");
       line[i].toLowerCase();
    }
    return line;
}

但是,如果我尝试提供具有非字母的输入(例如-.),则输出也包含它们,因为它们没有被删除。

示例输入

A dog is an animal. Animals are not people.

我得到的输出

A
dog
is
an
animal.
Animals
are
not
people.

预期的输出

a
dog
is
an
animal
animals
are
not
people
4

9 回答 9

47

问题是您的更改没有被存储,因为字符串是不可变的。每个方法调用都返回一个String表示更改的新方法,而当前方法String保持不变。您只需要将返回的数据存储String回数组中。

line[i] = line[i].replaceAll("[^a-zA-Z]", "");
line[i] = line[i].toLowerCase();

因为每个方法都返回一个String,所以您可以将您的方法调用链接在一起。这将对第一个方法的结果执行第二个方法调用,允许您在一行中执行两个操作。

line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
于 2012-06-22T03:24:54.520 回答
7

您需要将正则表达式的结果分配回行[i]。

for ( int i = 0; i < line.length; i++) {
  line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
}
于 2012-06-22T03:25:39.267 回答
3

它不起作用,因为字符串是不可变的,您需要设置一个值,例如

line[i] = line[i].toLowerCase(); 
于 2012-06-22T03:24:30.953 回答
3

您必须重新分配 的结果toLowerCase()replaceAll()返回给line[i],因为 JavaString是不可变的(其内部值永远不会改变,并且String类中的方法将返回一个新String对象而不是修改该String对象)。

于 2012-06-22T03:24:39.563 回答
3

正如它已经回答的那样,只是想分享一种这里没有提到的方式>

 str = str.replaceAll("\\P{Alnum}", "").toLowerCase();
于 2013-08-06T12:20:19.257 回答
1

一种很酷(但如果您不喜欢强制转换,则稍微麻烦)的方法是遍历整个字符串,逐个索引,将每个结果从 String.charAt(index) 转换为 (byte),然后然后检查该字节是否是 a) 在小写字母字符的数字范围内(a = 97 到 z = 122),在这种情况下将其转换回 char 并将其添加到字符串、数组或什么-have-you,或 b) 在大写字母字符的数字范围内(A = 65 到 Z = 90),在这种情况下,添加 32(A + 22 = 65 + 32 = 97 = a)并将其转换为char 并将其添加进去。如果它不在这两个范围内,只需将其丢弃。

于 2012-06-22T03:36:55.500 回答
1

您也可以Arrays.setAll为此使用:

Arrays.setAll(array, i -> array[i].replaceAll("[^a-zA-Z]", "").toLowerCase());
于 2018-09-19T06:51:28.427 回答
1

这是工作方法

 String name = "Joy.78@,+~'{/>";
 String[] stringArray = name.split("\\W+");
 StringBuilder result = new StringBuilder();
   for (int i = 0; i < stringArray.length; i++) {
    result.append(stringArray[i]);
   }
   String nameNew = result.toString();
    nameNew.toLowerCase();
于 2019-12-01T06:29:24.330 回答
0

公共静态无效解决(字符串行){

    // trim to remove unwanted spaces
    line= line.trim();

    String[] split = line.split("\\W+");

    // print using for-each
    for (String s : split) {
        System.out.println(s);
    }
于 2021-06-07T03:50:06.360 回答