例如,如果我要刪除非字母字符,我會做:如何排除有從字符串
for (int i = 0; i < s.length; i++) {
s[i] = s[i].replaceAll("[^a-zA-Z]", "");
}
如何完全排除與非詞字符串中的字母字符?
例如: 初始輸入:
"a cat jumped jumped; on the table"
應該排除 「躍升;」因爲 」;」。
輸出:
"a cat jumped on the table"
例如,如果我要刪除非字母字符,我會做:如何排除有從字符串
for (int i = 0; i < s.length; i++) {
s[i] = s[i].replaceAll("[^a-zA-Z]", "");
}
如何完全排除與非詞字符串中的字母字符?
例如: 初始輸入:
"a cat jumped jumped; on the table"
應該排除 「躍升;」因爲 」;」。
輸出:
"a cat jumped on the table"
編輯:(響應您的編輯)
你可以這樣做:
String input = "a cat jumped jumped; on the table";
input = input.replaceAll("(^|)[^ ]*[^A-Za-z ][^ ]*(?=$|)", "");
讓我們打破正則表達式:後
(^|)
比賽的一個單詞的開始,無論是在空格之後還是在字符串開始之後。[^ ]*
任何序列,包括空字符串,非空間的匹配(因爲空間打破字)[^A-Za-z ]
檢查該字符非字母和不破的字符串。[^ ]*
以使它匹配到單詞的結尾。(?=$|)
字的結束時,無論是字符串或下一個空格字符的結束相匹配,但它不消耗下一個空間,使連續的字將仍然匹配(即"I want to say hello, world! everybody"
變得"I want to say everybody"
)注:如果"a cat jumped off the table."
應該輸出"a cat jumped off the table"
,然後使用此:
input = input.replaceAll(" [^ ]*[^A-Za-z ][^ ]*(?=)", "").replaceAll("[^A-Za-z]$", "");
假設你有每個數組元素1個字,你可以做到這一點,以取代它們空字符串:
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]);
}
}
而且ArrayList
將所有沒有在他們非字母字符元素。
它不會匹配「123abass; [; []」:) – TheLostMind
@Quincunx感謝您爲數組和字符串解釋它! – user3383621
@Quincunx我測試了所有的方法,以確保我明白,但由於某種原因,「。」不會被刪除。爲什麼? – user3383621
試試這個:
s = s[i].join(" ").replaceAll("\\b\\w*\\W+\\w*(?=\\b)", "").split(" ");
它加入與空間陣列,然後應用正則表達式。正則表達式查找一個分詞符(\b
),然後至少包含一個非單詞字符(\w*\W+\w*
),然後在末尾有一個單詞中斷(不匹配,仍然有空格)。 split
將字符串分割成數組。
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
中,如果在數組中有一個像「123abass; [; [] _」的單詞,它應該完全排除,而不是從「壞」字符中刪除。 – user3383621
@ user3383621 - 檢查我編輯的答案。 – TheLostMind
不需要使用'^'和'$',因爲Java會自動運行,就好像它們在那裏一樣。 – Justin
你可以在陣列中的每個值使用.toLowerCase(),則搜索所述陣列針對-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;
}
你是什麼意思'排除一個字......從我array'?數組不能改變其長度。你想用空字符串替換這樣的詞嗎? – Pshemo
您是否有一組單詞,並且想要刪除非字母字符的單詞?請給出示例輸入,期望輸出和實際輸出。 – MirroredFate
你想創建一個新的,更短的數組,缺乏你想排除的單詞嗎?這對於列表而不是數組會更容易一些。 –