![](/img/trans.png)
[英]How to remove all non-alphabetic character excluding space using meta character from a string?
[英]How can I remove all Non-Alphabetic characters from a String using Regex in Java
我想從字符串中刪除所有非字母字符。
輸入:
"-Hello, 1 world$!"
Output:
"Helloworld"
但我得到的是: "Hello1world"
我該如何解決?
我的代碼:
public class LabProgram {
public static String removeNonAlpha (String userString) {
String[] stringArray = userString.split("\\W+");
String result = new String();
for(int i = 0; i < stringArray.length;i++){
result = result+ stringArray[i];
}
return result;
}
public static void main(String args[]) {
Scanner scnr = new Scanner(System.in);
String str = scnr.nextLine();
String result = removeNonAlpha(str);
System.out.println(result);
}
}
這應該有效:
import java.util.Scanner;
public class LabProgram {
public static String removeNonAlpha (String userString) {
// If you only want to remove the characters A to Z (lower an uppercase)
//return userString.replaceAll("[^A-Za-z]+", "");
return userString.replaceAll("[^\\p{Alpha}]+", "");
}
public static void main(String args[]) {
Scanner scnr = new Scanner(System.in);
String str = scnr.nextLine();
String result = removeNonAlpha(str);
System.out.println(result);
}
}
看一下replaceAll()
,它需要一個正則表達式作為第一個參數,一個替換字符串作為第二個參數:
return userString.replaceAll("[^\\p{Alpha}]", "");
你可以使用:
public static String removeNonAlpha (String userString) {
return userString.replaceAll("[^a-zA-Z]+", "");
}
問題是您的正則表達式模式不僅匹配字母,還匹配數字和下划線字符,因為這就是\W
所做的。 替換它可以解決問題:
String[] stringArray = userString.split("\\P{Alpha}+");
根據Pattern
Javadocs, \W
匹配任何非單詞字符,其中單詞字符在\w
中定義為[a-zA-Z_0-9]
。 這意味着它匹配大寫和小寫 ASCII 字母 A - Z & a - z、數字 0 - 9 和下划線字符 (“_”)。
解決方案是使用僅排除您想要排除的字符的正則表達式模式。 根據模式文檔可以執行[^a-zA-Z]
或\P{Alpha}
來排除主要的 26 個大小寫字母。 如果你想計算 26 個 ASCII 字母以外的字母(例如非拉丁字母表中的字母),你可以使用\P{IsAlphabetic}
。
\p{
prop
}
如果輸入具有屬性prop則匹配,而\P{
prop
}
如果輸入具有該屬性則不匹配。
正如其他答案所指出的那樣,您的代碼還存在其他問題,使其不合慣用,但這些問題不會影響您解決方案的正確性。
\W
相當於[a-zA-Z_0-9]
,因此它包含數字字符。
只需將其替換為"[^a-zA-Z]+"
,如下例所示:
import java.util.Arrays;
class Scratch {
public static void main(String[] args) {
String input = "-Hello, 1 world$!";
System.out.println("Input : " + input);
String[] split = input.split("[^a-zA-Z]+");
StringBuilder builder = new StringBuilder();
Arrays.stream(split).forEach(builder::append);
System.out.println("Ouput :" + builder);
}
}
Output:
Input : -Hello, 1 world$!
Ouput :Helloworld
您可以查看這篇文章以了解有關正則表達式的更多詳細信息: https://www.vogella.com/tutorials/JavaRegularExpressions/article.html#meta-characters
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.