例如,如果我想删除非字母字符,我会这样做:
for (int i = 0; i < s.length; i++) {
s[i] = s[i].replaceAll("[^a-zA-Z]", "");
}
如何从字符串中完全排除带有非字母字符的单词?
例如: 初始输入:
"a cat jumped jumped; on the table"
它应该排除&#34;跳跃;&#34;因为&#34;;&#34;。
输出:
"a cat jumped on the table"
答案 0 :(得分:2)
修改(响应您的修改)
你可以这样做:
String input = "a cat jumped jumped; on the table";
input = input.replaceAll("(^| )[^ ]*[^A-Za-z ][^ ]*(?=$| )", "");
让我们打破正则表达式:
(^| )
在单词开头之后,在空格之后或字符串开头之后匹配。[^ ]*
匹配非空格的任何序列,包括空字符串(因为空格会破坏单词)[^A-Za-z ]
检查字符是否为非字母字符,并且不会破坏字符串。[^ ]*
以使其匹配,直到该词的结尾。(?=$| )
匹配单词的结尾,无论是字符串的结尾还是下一个空格字符,但它不会消耗下一个空格,因此连续的单词仍然匹配(即{{1} }变成"I want to say hello, world! everybody"
)注意:如果"I want to say everybody"
输出"a cat jumped off the table."
,请使用以下内容:
"a cat jumped off the table"
假设每个数组元素有1个单词,可以用空字符串替换它们:
input = input.replaceAll(" [^ ]*[^A-Za-z ][^ ]*(?= )", "").replaceAll("[^A-Za-z]$", "");
如果您确实要将其删除,请考虑使用for (String string: s) {
if (s.matches(".*[^A-Za-z].*") {
s = "";
}
}
:
ArrayList
ArrayList<String> stringList = new ArrayList<>();
for (int index = 0; index < s.length; index++) {
if (s[index].matches(".*[^A-Za-z].*") {
stringList.add(s[index]);
}
}
将包含所有不包含非字母字符的元素。
答案 1 :(得分:0)
试试这个:
s = s[i].join(" ").replaceAll("\\b\\w*\\W+\\w*(?=\\b)", "").split(" ");
它使用空格连接数组,然后应用正则表达式。正则表达式查找单词分隔符(\b
),然后查找包含至少一个非单词字符(\w*\W+\w*
)的单词,然后在结尾处查找单词(不匹配,仍然会有空间)。 split
将字符串拆分为数组。
答案 2 :(得分:0)
public static void main(String[] args) throws ClassNotFoundException {
String str[] ={ "123abass;[;[]","abcde","1234"};
for(String s : str)
{
if(s.matches("^[a-zA-Z]+$")) // should start and end with [a-zA-Z]
System.out.println(s);
}
O/P : abcde
答案 3 :(得分:0)
您可以对数组中的每个值使用.toLowerCase(),然后针对a-z值搜索数组,它将比正则表达式更快。假设您的值位于名为“myArray”的数组中。
List<String> newValues = new ArrayList<>();
for(String s : myArray) {
if(containsOnlyLetters(s)) {
newValues.add(s);
}
}
//do this if you have to go back to an array instead of an ArrayList
String[] newArray = (String[])newValues.toArray();
这是containsOnlyLetters方法:
boolean containsOnlyLetters(String input) {
char[] inputLetters = input.toLowerCase().toCharArray();
for(char c : inputLetters) {
if(c < 'a' || c > 'z') {
return false;
}
}
return true;
}