【问题标题】:How to read user input into a string ignoring certain characters如何将用户输入读入忽略某些字符的字符串
【发布时间】:2018-03-08 04:10:53
【问题描述】:

我正在尝试获取一串大写的 A - G 字符,忽略字母表中的任何其他字符。我尝试了很长的 if 语句,例如:

    String initString;

    for (int i = 0; i < 128; i++){
        if (input.equals("A") || input.equals("B") || input.equals("C") || input.equals("D") || input.equals("E") || input.equals("F") || input.equals("G")){
            initString = intiString + input.next();
        }

    }

但有问题,例如输入字符串 AAAADDDGGIJUBBBB 但保存到 intiString 的字符串将是 AAAADDDGGBBBB。我将如何在每次迭代后添加到字符串,因为简单地尝试添加 input.next 和 intiString 是行不通的。

【问题讨论】:

  • 请告诉我们您遇到了什么问题?您是否希望用户逐个字符输入输入并从中创建一个字符串?或者用户将输入整个字符串然后您要处理它?
  • intiString 中的initString = intiString + input.next(); 是什么我怀疑是错字
  • @BalwinderSingh 这正是我将输入的字符串命名为。
  • 就像我说的那样,这是一个错字。另外,您应该使用正则表达式进行字符比较以避免长 if 条件。此外,用户停止提供更多输入的逻辑在哪里(我假设用户一次输入一个字符 - 正在处理中)
  • @BalwinderSingh 我希望用户一次性输入整个字符串

标签: java string for-loop if-statement input


【解决方案1】:

该代码非常错误。 next() 通常是 Iterator 方法,而 Iterator 不是 String。因为你在next() 之前检查了equal(),所以你甚至没有检查你实际得到的字符。

无论如何。而不是循环,只取输入字符串并删除不需要的字符可能更容易:

String input = "AAAADDDGGIJUBBBB";
String initString = Pattern.compile( "[^A-G]++" ).matcher( input ).replaceAll( "" );
// initString = "AAAADDDGGBBBB"

或者,如果您真的非常想使用循环 if 而不是正则表达式:

String input = "AAAADDDGGIJUBBBB";
StringBuilder buf = new StringBuilder( input.length() );
for ( int codepoint : input.chars().toArray() ) // You can also use char, slightly simpler
   if ( codepoint >= 'A' && codepoint <= 'G' )
      buf.append( Character.toChars( codepoint ) ); // Simply append the char here
String initString = buf.toString();
// initString = "AAAADDDGGBBBB"

【讨论】:

    【解决方案2】:

    试试这样的:

    char cont;
    String initString = "";
    do{
       Scanner sc =  new Scanner(System.in); 
       String input = sc.next();
    
       for(int i = 0; i < input.length(); i++){ 
          char ch =  input.charAt(i);
          if(ch >= 'A' && ch <= 'G'){
             initString = initString + ch;
          }
        }
        System.out.println("Do you want to enter more words(Y/N)");
        cont = sc.next().charAt(0); 
    }while(cont != 'N');
    

    【讨论】:

      【解决方案3】:

      试试这个

      public class MyClass {
              public static void main(String args[]) {
                  System.out.println(getAG("JUUYYTTYYGAAAFIUFF")); //This returns GAAAFFF
              }
      
              public static String getAG(String input)
              {
                  String outValue = "";
                  for(char c:input.toCharArray())
                  {
                      if(c >= 'A' && c<= 'G')
                      {
                          outValue += "" + c;
                      }
                  }
                  return outValue;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多