从java中的String数组中删除所有非字母字符

hyt*_*ucx 22 java regex string

我正在尝试编写一个方法,从Java中删除所有非字母字符String[],然后将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;
}
Run Code Online (Sandbox Code Playgroud)

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

示例输入

A dog is an animal. Animals are not people.
Run Code Online (Sandbox Code Playgroud)

我得到的输出

A
dog
is
an
animal.
Animals
are
not
people.
Run Code Online (Sandbox Code Playgroud)

预期的输出

a
dog
is
an
animal
animals
are
not
people
Run Code Online (Sandbox Code Playgroud)

n00*_*gon 42

问题是您的更改未被存储,因为字符串是不可变的.每个方法调用都返回一个String表示更改的new ,当前String保持不变.您只需将返回的内容存储String到数组中即可.

line[i] = line[i].replaceAll("[^a-zA-Z]", "");
line[i] = line[i].toLowerCase();
Run Code Online (Sandbox Code Playgroud)

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

line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
Run Code Online (Sandbox Code Playgroud)


pau*_*sm4 6

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

for ( int i = 0; i < line.length; i++) {
  line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)