我有一个庞大的文本文件,我必须手动解析。除了迭代它之外别无他法。
我抓住文件中的每一行和.split(“”)来获取各个组件 - 一些是int数组,另一些是char数组,还有一些是实际的文本字符串。
文本字符串让我头疼,因为有时他们在那里有空间。
示例行类似于:
String strLine = "Identifier {2 4 \"#0# == \\\"This String\\\"\" 12 21 6}
当我执行以下操作时:
String[] strParts = strLine.split(" ");
结果输出是String数组,其String值为:
Identifier,{2,4,"#0#,==,\"This,String\"",12,21,6}
我需要输出:
Identifier,{2,4,"#0# == \"This String\"",12,21,6}
所以我在思考是否有一个不同的空格字符,我可以在执行split()之前将其应用于引号内的String。
有人知道吗?
我也考虑过潜入RegEx,但是我还没有使用RegEx足以能够正确地在分割周围形成逻辑 - 除非空间位于第一个和最后一个引号之间,否则在空间上分割“。
THX。
[更新]
我在此处添加此内容,因为回复中的代码格式不是最佳的。
String strLine = "Identifier {2 4 \"#0# == \\\"This String\\\"\" 12 21 6}";
String delim = "§"; //use the Section Sign as a delimeter
StringBuilder sb = new StringBuilder();
//first part
sb.append(new String(strLine.substring(0,strLine.indexOf("\""))));
//middle part
sb.append(new String(strLine.substring(strLine.indexOf("\""),strLine.lastIndexOf("\""))).replace(" ", delim));
//last part
sb.append(new String(strLine.substring(strLine.lastIndexOf("\""))));
//make array
String[] parts = sb.toString().split(" ");
我稍后需要更换那些分隔符,但至少它会完成我现在需要的那些。
感谢大家的建议,这是他们的组合,最终为我解决了这个问题。
答案 0 :(得分:1)
您实际上不需要用空格替换字符串空格。尝试一些相当独特的东西:'_!_!'
首先查找替换字符串以验证它不在文件中,然后进行替换。
然后做正常的分裂。
最后,将替换字符串替换为成品中的正常空格。
答案 1 :(得分:1)
不完全优雅,但认为它能完成这项工作:
private static String[] mySplit(String src)
{
int firstIdx = src.indexOf('"');
int lastIdx = src.lastIndexOf('"');
if ( firstIdx == lastIdx )
return src.split(" ");
if ( src.charAt(lastIdx+1) == ' ' )
lastIdx++;
// first part
String[] firstPart = src.substring(0, firstIdx-1).split(" ");
String[] lastPart = src.substring(lastIdx+1).split(" ");
String[] res = new String[firstPart.length+1+lastPart.length];
System.arraycopy(firstPart,0,res,0, firstPart.length );
res[firstPart.length] = src.substring(src.indexOf('"'), src.lastIndexOf('"'));
System.arraycopy(lastPart,0,res,firstPart.length+1, lastPart.length );
return res;
}