分裂Java字符串用引号
可能重复:
Can you recommend a Java library for reading (and possibly writing) CSV files?分裂Java字符串用引号
我需要拆分Java中的字符串。分隔符是空格字符。 字符串可能包含成对的引号(内部包含一些文本和空格) - 成对引号内的整个主体应视为单个标记。 示例:
Input: token1 "token 2" token3 Output: array of 3 elements: token1 token 2 token3
该怎么办? 谢谢!
拆分两次。先引用,然后在空格上。
-1,请解释这是如何工作的(一二三四五),我会删除我的downvote。我怀疑海报想要4个代币。第一个“一”,第二个“二”,第三个“三四”和第四个“五”。 – camickr 2011-04-21 02:13:00
奇数标记将位于引号内,因此不要将它们分隔开。 报价分割收益率为“一二”,“三四”,“五”。只分割空间上的偶数标记,你会得到“一个”,“两个”,“三个四个”,“五个” – Adam 2011-04-21 03:24:45
的好处。 但StringTokenizer需要'returnDelims'标志。如果设置为true,它将返回分隔符作为标记,例如'''。因此,如果您在引用标记中使用引号分隔符来迭代标记,那么您知道下一个标记是带引号的字符串。之后的令牌将再次成为''',等等。 – Adam 2011-04-21 04:18:22
假设其他的解决方案不会为你工作,因为他们没有正确地检测匹配的引号或忽略引用文本内的空间,你可以试试:
private void addTokens(String tokenString, List<String> result) {
String[] tokens = tokenString.split("[\\r\\n\\t ]+");
for (String token : tokens) {
result.add(token);
}
}
List<String> result = new ArrayList<String>();
while (input.contains("\"")) {
String prefixTokens = input.substring(0, input.indexOf("\""));
input = input.substring(input.indexOf("\"") + 1);
String literalToken = input.substring(0, input.indexOf("\""));
input.substring(input.indexOf("\"") + 1);
addTokens(prefixTokens, result);
result.add(literalToken);
}
addTokens(input, result);
注意,这将不处理不平衡报价,逃脱的报价或其他错误/错误输入的情况。
import java.util.StringTokenizer;
class STDemo {
static String in = "token1;token2;token3"
public static void main(String args[]) {
StringTokenizer st = new StringTokenizer(in, ";");
while(st.hasMoreTokens()) {
String val = st.nextToken();
System.out.println(val);
}
}
}
这是简单的方法来串记号化
后输入文本的例子,然后您希望收到,这将会使口译的空间更小的东西。 – edwardsmatt 2011-04-21 01:48:42
-1,请参阅edwardTheGreat对如何发布具有详细信息的问题的评论,以便我们不必猜测您的确切要求。 – camickr 2011-04-21 02:16:17