我正在尝试解析一些行并检查它们的值,例如在字符串中:
" 1 ON 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中还有其他类可以轻松完成吗?
答案 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");
}
}