2013-03-18 44 views
1

我正在創建一個循環,測試用戶輸入的每個子字符串以測試非法字符。但是,它僅檢測非法字符何時位於輸入的最後位置。我感覺好像解決方案可能很簡單,但我似乎無法弄清楚,我該如何糾正這個問題,以便它可以在字符串中的任何位置檢測到它?只有在java中測試循環的最後一個子字符串

public class IllegalFileName { 

public static final Set<String> illegalCharsSet = new HashSet<String>(
     Arrays.asList("/", "\n", "\r", "\t", "\0", "\f", "`", "?", "*", 
       "\\", "<", ">", "|", "\"", ":", ".", "£", "$", "%", "^", 
       "&", ")", "(")); 

public static void main(String[] args) { 

    String illegalNameText = "££!233"; 
    String illegalNameText2 = "££!233$"; 
    boolean illegalName = false; 

    for (int i = 0; i <= illegalNameText.length() - 1; i++) { 
     System.out.println(i); 
     if (illegalCharsSet.contains(illegalNameText.substring(i))) { 
      System.out.println(illegalNameText + " is illegal"); 
      illegalName = true; 
      System.out.println(illegalNameText.substring(i)); 
     } 

    } 

    for (int i = 0; i <= illegalNameText2.length() - 1; i++) { 
     System.out.println(i); 
     if (illegalCharsSet.contains(illegalNameText2.substring(i))) { 
      System.out.println(illegalNameText2 + " is illegal"); 
      illegalName = true; 
      System.out.println(illegalNameText2.substring(i)); 
     } 
    } 
} 
} 

回答

1

substring(i)返回從包括以ni子串中排除(其中n是初始字符串的大小)。

使用一組字符,而不是(Set<Character>,由Arrays.asList('/', '\n', ...)初始化,並在theString.charAt(i)使用contains

+0

我現在看到我的錯誤,我一定誤解了API。謝謝! – 2013-03-18 16:01:08

1

您要檢查它是否包含非法字符,因而illegalCharsSet之一。我認爲它應該是這樣的:

for (int i = 0; i <= illegalNameText.length() - 1; i++) { 
    System.out.println(i); 
    if (illegalNameText.contains(illegalCharsSet.get(i)) { 
     System.out.println(illegalNameText + " is illegal"); 
     illegalName = true; 
    } 
} 
+0

@BrianAgnew編輯 – poitroae 2013-03-18 15:42:37

1

我只想通過非法字符迭代,然後做

if (illegalNameText.contains(illegalChar)) {... 

或類似的。更簡潔的解決方案可能是使用Java regular expressions並執行類似操作。

if (Pattern.matches("[£$%]", illegalNameText)) {... 

代替你的全套非法字符。爲了效率的緣故,您可能想要預先初始化/編譯上述正則表達式。

+0

我會研究一下使用正則表達式,正如你指出的那樣,它似乎是一個更簡潔的解決方案。謝謝! – 2013-03-18 16:08:01

相關問題