1

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

   " 1 ON OFF";

我必须检查是否:

  • 第一个字符为空白。
  • 第二个字符是 int。
  • 第三个字符为空白。
  • 第四个字符是 2 个字符并且它是 ON。
  • 第五个字符为空白。
  • 第 6 个字符为 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中是否还有其他可以轻松完成的类?

4

5 回答 5

2

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

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

它将给出以下数组:

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

它符合您的订单和您对第 1-6 个“字符”的定义。

于 2012-08-20T05:40:50.107 回答
1

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

于 2012-08-20T05:52:46.880 回答
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");
            }
    }
于 2012-08-20T05:54:22.320 回答
1

尝试使用String.split(" "), 来分割空格。您将得到一个数组,如果第一个字符为空,则String数组中的第一个字符将是一个空字符串:

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

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

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

循环遍历结果数组,包括一个parseIntfor 数字,您将能够匹配您所描述的规则。

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

Scanner sc = new Scanner(str);
sc.useDelimiter("");
System.out.println(sc.next());
于 2012-08-20T05:39:03.847 回答
1

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

于 2012-08-20T05:46:04.420 回答