没有定界符的输入字符串的标记化
Tokenization of input string without a delimiter
我有一些像这样的字符串 (Customer.Activity == "Car Loan") 我正在使用下面的代码在 java
中使用 StringTokenizer 拆分字符串
import java.util.ArrayList;
import java.util.StringTokenizer;
public class StringTokenizerClass {
public ArrayList<String> stringTokenizer(String str) {
StringTokenizer Tokenizer = new StringTokenizer(str);
ArrayList<String> tokenList = new ArrayList<String>();
while (Tokenizer.hasMoreTokens()) {
tokenList.add(Tokenizer.nextToken());
}
return (tokenList);
}
}
public class StringTokenizerMain {
public static void main(String[] args) {
String input = "(Customer.Activity == \"Car Loan\")";
StringTokenizerClass st = new StringTokenizerClass();
for (int i = 0; i < st.stringTokenizer(input).size(); i++) {
System.out.println(st.stringTokenizer(input).get(i));
}
}
}
我得到如下输出
("Customer.Activity"
==
"Car
Loan")
但我正在尝试实现如下输出
你能告诉我如何实现以上输出吗
我认为你需要:
StringTokenizer st = new StringTokenizer(input, "\"");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
您需要添加有效的分隔符,
StringTokenizer Tokenizer = new StringTokenizer(str,"\\"", true);
通过,returnDelims=true
如你所愿"
结果。
更新问题:
你可以使用"=(\""
但是对于==
,你不能使用任何delim,
(
Customer.Activity
=
=
"
Car Loan
"
)
来自 java docs、
的注释
StringTokenizer is a legacy class that is retained for compatibility
reasons although its use is discouraged in new code. It is recommended
that anyone seeking this functionality use the split method of String
or the java.util.regex package instead.
如果您对使用 Java regex API 的解决方案没有问题,请在下面给出完全符合您要求的解决方案:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
List<String> tokenList = new ArrayList<String>();
String str = "(\"Customer.Activity\" == \"Car Loan\")";
Pattern pattern = Pattern.compile("[(\")]|\w+.\w+|==");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
tokenList.add(matcher.group());
}
for (String token : tokenList) {
System.out.println(token);
}
}
}
输出:
(
"
Customer.Activity
"
==
"
Car Loan
"
)
我有一些像这样的字符串 (Customer.Activity == "Car Loan") 我正在使用下面的代码在 java
中使用 StringTokenizer 拆分字符串import java.util.ArrayList;
import java.util.StringTokenizer;
public class StringTokenizerClass {
public ArrayList<String> stringTokenizer(String str) {
StringTokenizer Tokenizer = new StringTokenizer(str);
ArrayList<String> tokenList = new ArrayList<String>();
while (Tokenizer.hasMoreTokens()) {
tokenList.add(Tokenizer.nextToken());
}
return (tokenList);
}
}
public class StringTokenizerMain {
public static void main(String[] args) {
String input = "(Customer.Activity == \"Car Loan\")";
StringTokenizerClass st = new StringTokenizerClass();
for (int i = 0; i < st.stringTokenizer(input).size(); i++) {
System.out.println(st.stringTokenizer(input).get(i));
}
}
}
我得到如下输出
("Customer.Activity"
==
"Car
Loan")
但我正在尝试实现如下输出
你能告诉我如何实现以上输出吗
我认为你需要:
StringTokenizer st = new StringTokenizer(input, "\"");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
您需要添加有效的分隔符,
StringTokenizer Tokenizer = new StringTokenizer(str,"\\"", true);
通过,returnDelims=true
如你所愿"
结果。
更新问题:
你可以使用"=(\""
但是对于==
,你不能使用任何delim,
(
Customer.Activity
=
=
"
Car Loan
"
)
来自 java docs、
的注释StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
如果您对使用 Java regex API 的解决方案没有问题,请在下面给出完全符合您要求的解决方案:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
List<String> tokenList = new ArrayList<String>();
String str = "(\"Customer.Activity\" == \"Car Loan\")";
Pattern pattern = Pattern.compile("[(\")]|\w+.\w+|==");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
tokenList.add(matcher.group());
}
for (String token : tokenList) {
System.out.println(token);
}
}
}
输出:
(
"
Customer.Activity
"
==
"
Car Loan
"
)