java 分割字符串函数_真正快速的Java函数来分割字符串而不影响引用的字符串?...

4 个答案:

答案 0 :(得分:6)

听起来您正在尝试解析CSV格式的字符串/文件?

如果是这样,也许您不必自己编写代码。检查apache commons库以进行CSV解析:

答案 1 :(得分:2)

您基本上可以从链接的问题中删除C#代码,但是您需要撤消它的迭代器内容,将yield return替换为附加到列表:

public static List SplitCSV(String csvString)

StringBuilder sb = new StringBuilder();

boolean quoted = false;

List list = new ArrayList();

for(char c : csvString.toCharArray()) {

if (quoted) {

if (c == '"')

quoted = false;

else

sb.append(c);

} else {

if (c == '"') {

quoted = true;

} else if (c == ',') {

list.add(sb.toString());

sb = new StringBuilder();

} else {

sb.append(c);

}

}

}

if (quoted)

throw new IllegalArgumentException("csvString: Unterminated quotation mark.");

list.add(sb.toString());

return list;

}

请注意,这当然不会处理带引号的字符串中的转义引号...

答案 2 :(得分:1)

我认为最流行的Java库自然是supercsv和opencsv。您在寻找非库解决方案吗?

答案 3 :(得分:0)

在commons-lang库中也有StrTokenizer:

StrTokenizer tokenizer = StrTokenizer.getCSVInstance();

tokenizer.reset(input);

String tokens[] = tokenizer.getTokenArray();

还有一种方法可以将令牌作为列表获取,它实现了Iterator / ListIterator函数,因此您可以在循环中以迭代器样式使用它。

您还可以继续调用“reset”方法来清除实例,并解析新的输入数据。

需要注意的一点是OpenCSV单词带有Reader实例,并将分析多行。此类使用字符串或char数组,并且只解析单个记录。它确实有一些内存开销,因为当你要求第一个令牌时,所有的解析都是在前面完成的。

然而,它比OpenCSV更具可配置性。

披露:我将此类的原始版本贡献给了库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值