我正在尝试编写一个方法,从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;
}
但是,如果我尝试提供具有非字母(例如-
或.
)的输入,则输出也包含它们,因为它们不会被删除。
示例输入
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
答案 0 :(得分:37)
问题是您的更改未被存储,因为字符串为immutable。每个method calls都会返回一个代表更改的新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();
答案 1 :(得分:5)
您需要将正则表达式的结果分配回行[i]。
for ( int i = 0; i < line.length; i++) {
line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
}
答案 2 :(得分:2)
它不起作用,因为字符串是不可变的,您需要设置一个值 e.g。
line[i] = line[i].toLowerCase();
答案 3 :(得分:2)
您必须将toLowerCase()
和replaceAll()
的结果重新分配回line[i]
,因为Java String
是不可变的(其内部值永远不会更改,以及String
中的方法1}}类将返回一个新的String
对象,而不是修改String
对象。)
答案 4 :(得分:2)
这是工作方法
public static void quickSort(List<Comparable> nums, int first, int last) {
int low = first;
int high = last;
int midIndex = (first + last) / 2;
Comparable midValue = nums.get(midIndex);
while(low < high) {
while (nums.get(low).compareTo(midValue) < 0) {
low++;
}
while (nums.get(high).compareTo(midValue) > 0) {
high--;
}
if (low <= high) {
swap(nums, low, high);
low++;
high--;
}
}
if (high > first)
quickSort(nums, first, high);
if (low < last)
quickSort(nums, low, last);
}
答案 5 :(得分:1)
很酷(但有点麻烦,如果你不喜欢投射)做你想做的事情的方法是遍历整个字符串,索引索引,将每个结果从String.charAt(index)转换为(byte) ),然后检查该字节是否是a)在小写字母字符的数值范围内(a = 97到z = 122),在这种情况下将其强制转换为char并将其添加到String,array ,或者你有什么,或者b)在大写字母字符的数值范围内(A = 65到Z = 90),在这种情况下加32(A + 22 = 65 + 32 = 97 = a)和将其转换为char并将其添加。如果它不在这两个范围内,只需丢弃它。
答案 6 :(得分:1)
正如它已经回答的那样,只想再分享一个未提及的方式&gt;
str = str.replaceAll("\\P{Alnum}", "").toLowerCase();
答案 7 :(得分:0)
您也可以使用Arrays.setAll
:
Arrays.setAll(array, i -> array[i].replaceAll("[^a-zA-Z]", "").toLowerCase());
答案 8 :(得分:0)
public static void solve(String line){
// 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);
}