Java拆分字符串,如果引用,则避免拆分字符
这可能是以前问过的,如果是,请参考URL 我有一些要拆分的字符串,例如:Java拆分字符串,如果引用,则避免拆分字符,java,regex,split,Java,Regex,Split,这可能是以前问过的,如果是,请参考URL 我有一些要拆分的字符串,例如: "TEXTVALUE";NUMBER;"TEXTVALUE";DOUBLE;DATE;"TEXTVALUE" 但是,在一些行读取之后,在原始数据中,我得到了如下结果: "TEXTVALUE;NUMBER;"TEXTVALUE;TEXTVALUE";DOUBLE;DATE;"TEXTVALUE" 注意第二个文本数据,它在引号内有拆分符。 我一直试图用一种模式来解决这个问题,但我不确定如何实现这一点 可能是这样的: str
"TEXTVALUE";NUMBER;"TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"
但是,在一些行读取之后,在原始数据中,我得到了如下结果:
"TEXTVALUE;NUMBER;"TEXTVALUE;TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"
注意第二个文本数据,它在引号内有拆分符。
我一直试图用一种模式来解决这个问题,但我不确定如何实现这一点
可能是这样的:
string.split("["+character+"&&[^\"?[\\w*|"+character+"*]\"?]]");
或
这是我试图实现的输出:
"TEXTVALUE"
NUMBER
"TEXTVALUE;TEXVALUE"
DOUBLE
DATE
"TEXVALUE"
类拆分演示
{
publicstaticvoidmain(字符串参数[])
{
String str=“\'TEXTVALUE\”数字;\'TEXTVALUE\”双精度;日期;\'TEXTVALUE\”;
字符串newSplit[]=str.split(“;”);
对于(int i=0;i仅当输入的其余部分中出现偶数引号时,才由分隔符拆分:
String[] parts = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");
请参阅IDEOne上的一个示例。如何拆分文本的简单示例如下:
public class StringSplit {
public static void main(String[] args) {
String s = "\"TEXTVALUE\";NUMBER;\"TEXT;VALUE\";DOUBLE;DATE;\"TEXTVALUE\"";
String[] strSplit = s.split(";");
/*
* first, we split the string after the ";" character then, we try to
* evaluate and see if there where any ";" characters in our text
* fields, if they where, we concatenate the strings such that to obtain
* only one
*/
StringBuilder buf = new StringBuilder();
for (int i = 0; i < strSplit.length; i++) {
int count = 0;
if (strSplit[i].charAt(0) == '\"') {
count++;
}
if (strSplit[i].charAt(strSplit[i].length() - 1) == '\"') {
count++;
}
if (count % 2 == 1) {
buf.append(strSplit[i]);
buf.append(";");
buf.append(strSplit[i + 1]);
buf.append("\n");
i++;
} else {
buf.append(strSplit[i]);
buf.append("\n");
}
}
System.out.println(buf.toString());
}
公共类StringSplit{
公共静态void main(字符串[]args){
字符串s=“\”文本值\”数字;\”文本;值\”双精度;日期;\”文本值\”;
字符串[]strSplit=s.split(“;”);
/*
*首先,我们在“;”字符后拆分字符串,然后,我们尝试
*评估并查看文本中是否有“;”字符
*字段,如果它们位于何处,我们将字符串连接起来,以获得
*只有一个
*/
StringBuilder buf=新的StringBuilder();
对于(int i=0;i
}
结果如下:
“文本值”
数字
“文本;值”
双倍
日期
“TEXTVALUE”是否可以保证它只是。“
而不是像”…“
或更多嵌套/不均匀(转义?)的引号?可能是重复的,完全确定文本值引用为:“value”在这里描述“TEXTVALUE;NUMBER;”TEXTVALUE;TEXTVALUE;DOUBLE;DATE;”TEXTVALUE“的预期值”
,这将有助于实现我试图实现的目标。“TEXTVALUE”数字;“TEXTVALUE”双精度;日期;“TEXTVALUE”数据是否在文件中?
String[] parts = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");
public class StringSplit {
public static void main(String[] args) {
String s = "\"TEXTVALUE\";NUMBER;\"TEXT;VALUE\";DOUBLE;DATE;\"TEXTVALUE\"";
String[] strSplit = s.split(";");
/*
* first, we split the string after the ";" character then, we try to
* evaluate and see if there where any ";" characters in our text
* fields, if they where, we concatenate the strings such that to obtain
* only one
*/
StringBuilder buf = new StringBuilder();
for (int i = 0; i < strSplit.length; i++) {
int count = 0;
if (strSplit[i].charAt(0) == '\"') {
count++;
}
if (strSplit[i].charAt(strSplit[i].length() - 1) == '\"') {
count++;
}
if (count % 2 == 1) {
buf.append(strSplit[i]);
buf.append(";");
buf.append(strSplit[i + 1]);
buf.append("\n");
i++;
} else {
buf.append(strSplit[i]);
buf.append("\n");
}
}
System.out.println(buf.toString());
}