使用Scanner类解析字符串

时间:2012-08-20 05:33:44

标签: java regex

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

   " 1 ON OFF";

我必须检查:

  • 第一个字符是空白的。
  • 第二个字符是int。
  • 第三个字符是空白的。
  • 第四个字符是2个字符,它是ON。
  • 第五个字符是空白的。
  • 第六个字符是3个字符,它是OFF。

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

   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 个答案:

答案 0 :(得分:2)

我能想到的最接近的是按字界划分:

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

它将提供以下数组:

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

它符合您的订购和您对第1至第6个“角色”的定义。

答案 1 :(得分:1)

尝试使用String.split(" ")来分隔空格。你会得到一个数组,如果第一个字符是空白的,那么数组中的第一个String将是一个空字符串:

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

通过这个例子,你将得到这个数组:["", "1", "ON", "OFF"]

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

循环生成的数组,包括该数字的parseInt,您将能够匹配您所描述的规则。

请注意,可以使用Scanner来对字符串进行类似的标记,方法是将分隔符设置为空字符串:

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

另一种选择:

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");
            }
    }