首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从java中的字符串数组中删除所有非字母字符

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

Stack Overflow用户
提问于 2012-06-22 11:21:35
回答 8查看 94.5K关注 0票数 22

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

代码语言:javascript
复制
static String[] inputValidator(String[] line) {
    for(int i = 0; i < line.length; i++) {
       line[i].replaceAll("[^a-zA-Z]", "");
       line[i].toLowerCase();
    }
    return line;
}

但是,如果我试图提供一个没有字母的输入(比如-或者

.)输出也由它们组成,因为它们没有被删除。

示例输入

代码语言:js
复制
A dog is an animal. Animals are not people.

我得到的输出

代码语言:javascript
复制
A
dog
is
an
animal.
Animals
are
not
people.

预期的输出

代码语言:javascript
复制
a
dog
is
an
animal
animals
are
not
people
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-06-22 11:24:55

问题是您的更改没有被存储,因为字符串immutable..。每一个

方法calls(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceAll) [返回一个新的String表示更改,并使用当前String保持不变。您只需要存储返回的String回到数组中。

代码语言:javascript
复制
line[i] = line[i].replaceAll("[^a-zA-Z]", "");
line[i] = line[i].toLowerCase();

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

代码语言:js
复制
line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
票数 47
EN

Stack Overflow用户

发布于 2012-06-22 11:25:39

您需要将正则表达式的结果分配回各行我..。

代码语言:javascript
复制
for ( int i = 0; i < line.length; i++) {
  line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
}
票数 6
EN

Stack Overflow用户

发布于 2012-06-22 11:24:31

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

代码语言:js
复制
line[i] = line[i].toLowerCase();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11149759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档