2015-04-08 21 views
5

任何人都可以建議我如何檢查String是否包含全角字符Java?全角字符是特殊字符。如何檢查字符串是否在java中有全角字符

在字符串全角字符:

abc@gmail.com

在字符串半寬字符:

[email protected]
+0

包含方法會告訴你。遍歷一個只包含那些「全角字符」的字符串,並且對每一個字符串運行contains方法。 – Stultuske

+0

是的,我也是這樣檢查的。但代碼看起來很亂,但在上面的情況下,我正在檢查電子郵件。所以我必須檢查一些額外的字符,如@,。 ,_等 – Kumar

+0

你在找**全**全寬,還是**全**全寬?即當滿和半混合時你想要什麼結果? – weston

回答

2

您可以UNICODE比較由於統一爲英文字母(AZ)是97-122,所以你可以很容易地diffrentiate兩者之間

String str="abc@gmail.com"; 
System.out.println((int)str.charAt(0)); 

輸入

abc@gmail.com 

輸出

65345 
+1

謝謝您的回覆。但是在檢查電子郵件字符串時,'@'需要與「。」,「_」等一起考慮。有沒有我可以檢查的隱式方法。 – Kumar

+0

#Neeraj:你能否讓我知道所有全角字符的Unicode範圍。 – Kumar

2

你可以嘗試這樣的事情:

public static final String FULL_WIDTH_CHARS = "AaBbCcDdEeFfGgHhIiJj" 
         + "KkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; 

public static boolean containsFullWidthChars(String str) { 
    for(int i = 0; i < FULL_WIDTH_CHARS.length(); i++) { 
     if(str.contains(String.valueOf(FULL_WIDTH_CHARS.charAt(i)))) { 
      return true; 
     } 
    } 
    return false; 
} 
0

使用正則表達式在這裏。 \ W用於檢查非單詞字符。

海峽將包含全角字符,如果下面的語句返回true:

布爾標誌= str.matches( 「\\ W」);

+0

自檢查電子郵件。我需要檢查是否有任何特殊字符也是全寬。 – Kumar

2

我不知道,如果你正在尋找的任何或全部,所以這裏是函數兩種:

public static boolean isAllFullWidth(String str) { 
    for (char c : str.toCharArray()) 
     if ((c & 0xff00) != 0xff00) 
     return false; 
    return true; 
} 

public static boolean areAnyFullWidth(String str) { 
    for (char c : str.toCharArray()) 
     if ((c & 0xff00) == 0xff00) 
     return true; 
    return false; 
} 

至於你的一半寬度'.'和可能'_'。先帶他們出去了,也許替換:如果你想使用正則表達式來測試

String str="abc@gmail.com"; 

if (isAllFullWidth(str.replaceAll("[._]",""))) 
    //then apart from . and _, they are all full width 

正則表達式

或者,那麼這是全寬度的實際字符範圍:

[\uFF01-\uFF5E] 

因此,該方法如下所示:

public static boolean isAllFullWidth(String str) { 
    return str.matches("[\\uff01-\\uff5E]*"); 
} 

您可以添加其他字符,所以不需要去掉它們:

public static boolean isValidFullWidthEmail(String str) { 
    return str.matches("[\\uff01-\\uff5E._]*"); 
} 
+0

謝謝你的代碼。但我不應該忽視「。」 ,「_」和任何特殊字符。因爲它們也可以全寬。你能否讓我知道Unicode的範圍,包括特殊字符在內的全寬度。 – Kumar

+1

那麼你的例子不包括句號的全寬版本。我已經給你全角的全角字符。 – weston

+0

'str.matches(「[\\ uff01 - \\ uff5E] *」)'應該這樣做。如果沒有,那可能是因爲它並不是全部寬度,就像你發佈的例子。 – weston

相關問題