有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Scanner类解析字符串

我试图解析一些行并检查它们的值,例如在字符串中:

   " 1 ON OFF";

我必须检查一下:

  • 第一个字符是空的
  • 第二个字符是int
  • 第三个字符是空白的
  • 第四个字符是2个字符,并且它处于打开状态
  • 第五个字符是空的
  • 第六个字符是3个字符,它是关闭的

我可以使用正则表达式一次性完成这项工作,但我想要的是,每次检查后,我都必须显示是否正确:

   System.out.println("1st character is not a blank : incorrect");
   System.out.println("1st character is blank : correct");

我想用Scanner类来做这个,但是当我试图检测第一个字符时,它显示的是1而不是字符串的空白

   " 1 ON OFF";

   public class NewClass {    

    public void StringExample(){
        String str = " 1 ON OFF";

        Scanner sc = new Scanner(str);
        System.out.println(sc.next());
    }

    public static void main(String args[]){
        NewClass nc = new NewClass();
        nc.StringExample();
    }
}

java中是否还有其他类可以轻松实现这一点


共 (5) 个答案

  1. # 1 楼答案

    可以使用parboiled并声明一个小语法

  2. # 2 楼答案

    尝试使用^{}来拆分空间。您将得到一个数组,如果第一个字符为空,那么数组中的第一个String将是一个空字符串:

    String strs[] = " 1 ON OFF".split(" ");
    

    在本例中,您将得到以下数组:["", "1", "ON", "OFF"]

    如果第一个字符是空格,那么第一个元素就是空字符串。如果有2前导空格,那么您将看到空字符串作为前两个元素。剩下的字符串将是与原始字符串分隔的标记,但是如果标记之间有额外的空格,那么您将看到额外的空字符串作为数组元素

    在结果数组上循环,包括数字的^{},您将能够匹配您描述的规则

    请注意,可以使用Scanner通过将分隔符设置为空字符串来类似地标记字符串:

    Scanner sc = new Scanner(str);
    sc.useDelimiter("");
    System.out.println(sc.next());
    
  3. # 3 楼答案

    值得一看StringReader,它可以让你一个字符一个字符地扫描字符串。另一种选择是简单地读取每个字符(String#charAt)并检查它是否符合规则

  4. # 4 楼答案

    我能想到的最接近的是按单词边界分割:

    String tokens[] = " 1 ON OFF".split("\\b");
    

    它将提供以下数组:

    { " ", "1", " ", "ON", " ", "OFF" }
    

    它符合您的顺序和您对第1-6个“字符”的定义

  5. # 5 楼答案

    另一种选择:

    public static void main(String[] args) throws IOException
        {
    
            String patternString = " 1 ON OFF";
            boolean pass = true;
    
                if (patternString.charAt(0) != ' ' && patternString.charAt(2) != ' ') {
                    pass = false;
                }
    
                int digit = Character.getNumericValue(patternString.charAt(1));
    
                if (digit < 0 && digit > Integer.MAX_VALUE) {
                    pass = false;
                }
    
                if (patternString.charAt(3) != 'O' && patternString.charAt(4) != 'N') {
                    pass = false;
                }
    
                if (patternString.charAt(5) != ' ' && patternString.charAt(6) != 'O' && patternString.charAt(7) != 'F' && patternString.charAt(8) != 'F') {
                    pass = false;
                }
    
                if (pass) {
                    System.out.println("Validation pass");
                }
        }