2016-06-22 38 views
1

我的程序是为了返回用户输入的任何字符串的反转版本,但是如果字符串包含任何符号,它也应该报告错误的输入。我似乎无法找到办法做到这一点。顺便说一下,该程序带有一个IO.java模块。这里是我的代码如果字符串包含字母和空格以外的任何其他字符,则报告输入错误?

public class ReverseWords{ 
public static void main(String [ ] args){ 
    String word= IO.readString(); 
     if(word.contains("[\\!\\*\\@\\#\\-\\+\\.\\^\\:\\.\\]")){ 
      IO.reportBadInput();} 

    word = new StringBuffer(word).reverse().toString(); 
    IO.outputStringAnswer(word); 

    } 
    } 
+3

['contains'需要一个文本字符串,不正则表达式。](http://stackoverflow.com/questions/15130309/how-to-use-regex-in-string-contains-method-in-java) – resueman

+0

你可以扩大一点吗?我对java相当陌生 – lazepanda

+0

您传递给'contains'的'String'是一个正则表达式。然而,'contains'不会把它当作一个;它会搜索您指定的确切字符。因此,除非字符串包含'[\!\ * \ @ \#\ - \。\]',否则它将不匹配,即使它包含其中一个字符。你应该使用我在上面发布的链接中提出的解决方案。 – resueman

回答

1

把下面的代码放在main方法中并测试它。

Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Pleease enter a String ::"); 
    String str = sc.next(); 
    Matcher m = p.matcher(str); 
    if (m.find()){ 
     System.out.println("String Contains Special Chars"); 
    }else{ 

     System.out.println("It is String "); 
     System.out.println(new StringBuilder(str).reverse().toString()); 
    } 
     sc.close(); 
+0

试过这个我有很多编译器错误 – lazepanda

+0

你能告诉我你已经试过的代码和编译错误吗? – Raju

0

您可以使用正则表达式来检测非字母数字符号

Pattern pattern = Pattern.compile("[^a-zA-Z0-9]"); 
Boolean hasNonAlphaNumeric = p.matcher(s).find(); 

或者你也可以使用Apache的StringUtils类及其方法

boolean StringUtils.isAlphanumeric(String string) 
相关问题