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中是否还有其他类可以轻松实现这一点
# 1 楼答案
可以使用parboiled并声明一个小语法
# 2 楼答案
尝试使用^{} 来拆分空间。您将得到一个数组,如果第一个字符为空,那么数组中的第一个
String
将是一个空字符串:在本例中,您将得到以下数组:
["", "1", "ON", "OFF"]
如果第一个字符是空格,那么第一个元素就是空字符串。如果有2前导空格,那么您将看到空字符串作为前两个元素。剩下的字符串将是与原始字符串分隔的标记,但是如果标记之间有额外的空格,那么您将看到额外的空字符串作为数组元素
在结果数组上循环,包括数字的^{} ,您将能够匹配您描述的规则
请注意,可以使用
Scanner
通过将分隔符设置为空字符串来类似地标记字符串:# 3 楼答案
值得一看StringReader,它可以让你一个字符一个字符地扫描字符串。另一种选择是简单地读取每个字符(String#charAt)并检查它是否符合规则
# 4 楼答案
我能想到的最接近的是按单词边界分割:
它将提供以下数组:
它符合您的顺序和您对第1-6个“字符”的定义
# 5 楼答案
另一种选择: