Java 将表达式字符串拆分为ArrayList
我有一个表达式字符串作为Java 将表达式字符串拆分为ArrayList,java,string,split,Java,String,Split,我有一个表达式字符串作为 "((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen)))"; 是否有任何内置函数可以将它们拆分为列表具有以下格式: list[0] = "("; list[1] = "("; list[2] = "firstname"; list[3] = "="; list[
"((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen)))";
是否有任何内置函数可以将它们拆分为列表
具有以下格式:
list[0] = "(";
list[1] = "(";
list[2] = "firstname";
list[3] = "=";
list[4] = "john"
list[5] = "AND";
list[6] = "Lastname"
list[7] = "=";
list[8] = "Eleven";
list[9] = ")"
list[10] = "OR"
list[11] = "(";
list[12] = "salary";
list[13] = "15000"
list[14] = "AND"
etc...
只需对多个delimeters使用
split
String[] tokens = exp.split("\\(|\\)| |=");
只需对多个delimeters使用
split
String[] tokens = exp.split("\\(|\\)| |=");
在“(
”之间指定空格,如下所示:
String exp = "( ( firstname = john AND Lastname = Eleven ) OR ( salary = 15000 AND location = Mexico OR ( firstname = mathew AND lastname = Thirteen ) ) )";
现在您可以使用exp.split(“”;
在“(
”之间指定空格,如下所示:
String exp = "( ( firstname = john AND Lastname = Eleven ) OR ( salary = 15000 AND location = Mexico OR ( firstname = mathew AND lastname = Thirteen ) ) )";
现在,您可以使用exp.split(“”)进行拆分;
您可以使用空格$1空格替换所有(
或)
空间,然后使用空格进行拆分:
String spl[] =
str.replaceAll("([\\(\\)=])", " $1 ").replaceAll(" +", " ").trim().split("\\s");
输出
(, (, firstname, =, john, AND, Lastname, =, Eleven, ), OR, (, salary, =, 15000, AND,
location, =, Mexico, OR, (, firstname, =, mathew, AND, lastname, =, Thirteen, ), ), )
您可以用空格$1空格替换所有(
或)
WO,然后用空格拆分:
String spl[] =
str.replaceAll("([\\(\\)=])", " $1 ").replaceAll(" +", " ").trim().split("\\s");
输出
(, (, firstname, =, john, AND, Lastname, =, Eleven, ), OR, (, salary, =, 15000, AND,
location, =, Mexico, OR, (, firstname, =, mathew, AND, lastname, =, Thirteen, ), ), )
通常,此过程称为:
在计算机科学中,词法分析是将字符序列(如在计算机程序或网页中)转换为标记序列(具有指定意义的字符串)的过程
这可以通过定义一个:
词法语法是定义标记语法的形式语法
(, (, firstname, =, john, AND, Lastname, =, Eleven, ), OR, (, salary, =, 15000, AND,
location, =, Mexico, OR, (, firstname, =, mathew, AND, lastname, =, Thirteen, ), ), )
一旦定义了词法语法,就可以使用JavaCC或JFlex等工具在词法器中转换该语法,这基本上是一个软件,它将字符序列作为输入,并生成一个标记列表作为输出
请注意,词法分析器不仅在字符串序列中拆分原始字符序列,而且在更具体的标记序列中拆分,例如:
OPEN_PARANTHESIS
OPEN_PARANTHESIS
NAME with value firstname
OPERATOR with value =
NAME with value john
OPERATOR with value AND
NAME with value Lastname
OPERATOR with value =
...
因此,它所做的事情比你所问的要多,但你的问题似乎与它非常相关。通常,这个过程被称为:
在计算机科学中,词法分析是将字符序列(如在计算机程序或网页中)转换为标记序列(具有指定意义的字符串)的过程
这可以通过定义一个:
词法语法是定义标记语法的形式语法
(, (, firstname, =, john, AND, Lastname, =, Eleven, ), OR, (, salary, =, 15000, AND,
location, =, Mexico, OR, (, firstname, =, mathew, AND, lastname, =, Thirteen, ), ), )
一旦定义词汇语法,就可以使用诸如JavaCC或JFlex这样的工具,它们在lexer中转换语法,这基本上是一个软件,它将作为输入一系列字符并生成一个标记列表
请注意,词法分析器不仅在字符串序列中拆分原始字符序列,而且在更具体的标记序列中拆分,例如:
OPEN_PARANTHESIS
OPEN_PARANTHESIS
NAME with value firstname
OPERATOR with value =
NAME with value john
OPERATOR with value AND
NAME with value Lastname
OPERATOR with value =
...
因此,它比您所问的做得更多,但您的问题似乎与它非常相关。您可以使用向前看
和向后看
和正则表达式
来获取令牌并对其进行迭代,例如:
String s = "((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen))";
for(String token : s.split("((?=(\\(|\\)|\\=|\\sAND\\s|\\sOR\\s))|(?<=(\\(|\\)|\\=|\\sAND\\s|\\sOR\\s)))")){
System.out.println(token.trim());
}
String s=“((firstname=john,Lastname=11)或(salary=15000,location=Mexico或(firstname=mathew,Lastname=13))”;
对于(字符串标记:s.split((((?=(\\(\\\\)\\\=\\\\sAND\\s\\\\\sOR\\s))。(?您可以使用lookahead
和lookahead
和regex
获取标记并对其进行迭代,例如:
String s = "((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen))";
for(String token : s.split("((?=(\\(|\\)|\\=|\\sAND\\s|\\sOR\\s))|(?<=(\\(|\\)|\\=|\\sAND\\s|\\sOR\\s)))")){
System.out.println(token.trim());
}
String s=“((firstname=john,Lastname=11)或(salary=15000,location=Mexico或(firstname=mathew,Lastname=13))”;
对于(字符串标记:s.split((((?=(\\(\\\\)\\=\\\\\sAND\\s\\\\\sOR\\s)))(您是否尝试过使用正则表达式?请尝试String.split
我建议您阅读此有关split(regex)的turorial问题,我无法获取用于split的运算符。例如,如果我使用(或)进行split,我将无法获取(在结果列表中,您是否尝试过使用正则表达式?trystring.split
我建议您阅读这个有关split(正则表达式)的问题,我无法获取用于split的运算符。例如,如果我使用(或)进行split,我将无法获取(在结果列表中,您不应该仅仅为了按照编码标准使用split
函数而更改表达式本身任何表达式都应该有空格b/w花括号扫描您显示的工作代码将空格放在正确的位置?这几乎是一个等价的问题,因此您在这里没有提供太多答案。您不应该仅仅为了使用符合编码标准的split
函数而更改表达式本身任何表达式都应该有空格b/w花括号扫描您显示的工作代码将空格放在正确的位置?这几乎是一个等价的问题,所以您在这里没有提供太多答案。这看起来很有希望只是edited为拆分(“\\s+”)。因此不需要第二次替换。我已经在编辑我的答案@CrazyProgrammer我现在犯了一个错误,它可以工作了fine@CrazyProgrammer您不必使用\\s+
如果您检查是否可以获得=,11),
这是不正确的,请像现在这样使用我的解决方案,它工作正常:)这看起来很有希望,只是编辑为拆分(\\s+)。因此不需要第二次替换。我已经编辑了我的答案@CrazyProgrammer我现在犯了一个错误,它可以工作了fine@CrazyProgrammer您不必使用\\s+
如果您检查是否可以获得=,11),
这是不正确的,请像现在这样使用我的解决方案,它工作正常:)这看起来很有趣,也是最好的实现方式。如果你能帮我举一些例子,我会尝试使用它们。这看起来很有趣,也是最好的实现方式。如果你能帮我举一些例子,我会尝试使用它们