【问题标题】:Reporting bad input if string contains anything other than letters and spaces? [duplicate]如果字符串包含除字母和空格以外的任何内容,则报告错误输入? [复制]
【发布时间】:2016-06-22 17:30:01
【问题描述】:

我的程序旨在返回用户输入的任何字符串的反转版本,但如果字符串包含任何符号,它也应该报告错误输入。我似乎找不到办法做到这一点。顺便说一句,该程序带有一个 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);

  }
  }

【问题讨论】:

  • 你能再扩展一点吗?我对 java 还很陌生
  • 您传递给containsString 是一个正则表达式。但是,contains 不会将其视为一个;它将搜索您指定的确切字符。因此,除非字符串包含[\!\*\@\#\-\+\.\^\:\.\],否则它不会匹配,即使它包含这些字符之一。您应该使用我在上面发布的链接中提出的解决方案。
  • 我查看了您发布的链接,但似乎答案适用于您想要查找某些单词但省略符号的情况。而不是自己查找符号并报告错误输入。

标签: java symbols


【解决方案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();

【讨论】:

  • 试过这个我得到了很多编译器错误
  • 你能告诉我你试过的代码和编译错误吗?
【解决方案2】:

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

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

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

boolean StringUtils.isAlphanumeric(String string)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多