2013-03-18 43 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

相关问题