带空分隔符的Java拆分字符串
我有一个弦女巫,我想分开。我唯一的分隔符是一个空格。看起来像这样: 12 BobMarley 2015年1月22日01 我用这个:带空分隔符的Java拆分字符串,java,string,split,line,Java,String,Split,Line,我有一个弦女巫,我想分开。我唯一的分隔符是一个空格。看起来像这样: 12 BobMarley 2015年1月22日01 我用这个: line = br1.readLine(); String[] parts = line.split(" "); String number = parts[0]; String reference = parts[1]; String date = parts[2]; String one = parts[3]; String sd
line = br1.readLine();
String[] parts = line.split(" ");
String number = parts[0];
String reference = parts[1];
String date = parts[2];
String one = parts[3];
String sd = parts[4];
String dd = parts[5];
String tt = parts[6];
String vs = parts[7];
System.out.println(
"No:"+number+"Ref:"+reference+"Date:"+date+"One:"+one+"Sd:"+sd+"Dd:"+dd+"Tt:"+tt+"Vs:"+vs);
结果是:
编号:12参考号:BobMarley日期:2015年1月22日一:0 Sd:0 Dd:1 Tt:1 Vs:0
正如所料。好的
现在,我的问题是当字符串是:12 Bob Marley 22/01/15 0 0 1 0
或:12《哈利波特与乐队》2015年1月22日
输出将是:
编号:12参考号:鲍勃日期:马利一号:2015年1月22日星期二:0 Tt:1 Vs:1
预计:12参考号:鲍勃·马利日期:2015年1月22日
你知道我怎样才能只修剪号码和日期之间的空白吗?或任何其他想法如何得到一个干净的参考,无论有多少字里面。谢谢大家! 通常最好选择一个不是值中常用符号的分隔符。例如,选择空格作为分隔符会导致包含空格的单个值出现问题 如果您可以更改文件中数据存储的约定,我建议您选择不同的分隔符,例如逗号
如果您别无选择,只能使用空格作为分隔符,那么您唯一的选择就是使用某种正则表达式对文件分区进行硬编码。通常最好选择一个不是值中常见符号的分隔符。例如,选择空格作为分隔符会导致包含空格的单个值出现问题 如果您可以更改文件中数据存储的约定,我建议您选择不同的分隔符,例如逗号
如果您别无选择,只能使用空格作为分隔符,那么您唯一的选择就是使用某种正则表达式对文件分区进行硬编码。我在正则表达式方面不是最棒的,但我得到的是:
/(\d+) ([\w ]+) (\d+\/\d+\/\d+) (\d) (\d) (\d) (\d) (\d)/
相配
任意位数,后跟空格和
任意数量的字母和空格,后跟空格和
数字/数字/数字,后跟空格和
数字、空格
数字、空格
数字、空格
数字、空格
数字
或者,为了让每个人都更容易,用逗号分隔你的值。它们是为这类事情而设计的。我在regex不是最棒的,但我得到的是:
/(\d+) ([\w ]+) (\d+\/\d+\/\d+) (\d) (\d) (\d) (\d) (\d)/
相配
任意位数,后跟空格和
任意数量的字母和空格,后跟空格和
数字/数字/数字,后跟空格和
数字、空格
数字、空格
数字、空格
数字、空格
数字
或者,为了让每个人都更容易,用逗号分隔你的值。它们是为这类事情而设计的。我建议首先使用正则表达式拆分行以捕获参考部分,然后使用空格拆分以获得结果:
String line = "12 Bob Marley 22/01/15 0 0 1 1 0";
String pattern = "([0-9]+)([a-zA-z|' ']+)(.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if(m.find()) {
System.out.println("No:" + m.group(1));//this will get 12
System.out.println("ref:" + m.group(2));//this will get the name
String[] parts = m.group(3).split(" ");//this is the rest
String date = parts[0];
String one = parts[1];
String sd = parts[2];
String dd = parts[3];
String tt = parts[4];
String vs = parts[5];
System.out.println("Date:"+date+"One:"+one+"Sd:"+sd+"Dd:"+dd+"Tt:"+tt+"Vs:"+vs);
}
我建议首先使用正则表达式拆分行以捕获参考部分,然后使用空格拆分以获得结果:
String line = "12 Bob Marley 22/01/15 0 0 1 1 0";
String pattern = "([0-9]+)([a-zA-z|' ']+)(.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if(m.find()) {
System.out.println("No:" + m.group(1));//this will get 12
System.out.println("ref:" + m.group(2));//this will get the name
String[] parts = m.group(3).split(" ");//this is the rest
String date = parts[0];
String one = parts[1];
String sd = parts[2];
String dd = parts[3];
String tt = parts[4];
String vs = parts[5];
System.out.println("Date:"+date+"One:"+one+"Sd:"+sd+"Dd:"+dd+"Tt:"+tt+"Vs:"+vs);
}
查找日期显示位置的索引。使用s.indexOf/的简单版本,并确定是否为两位数的日期 您也可以使用模式来实现这一点
Pattern pattern = Pattern.compile("\d{2}\/\d{2}\/\d{2}\/");
Matcher matcher = pattern.matcher(s);
startDateIdx = matcher.start();
endNumberIdx = s.indexOf(" ");
String number = s.substring(0,endNumberIdx-1);
String reference = s.substring(endNumberIdx+1,startDateIdx-1);
String[] parts = s.subtring(startDateIdx).split(" ");
String date = parts[0];
String one = parts[1];
String sd = parts[2];
String dd = parts[3];
String tt = parts[4];
String vs = parts[5];
查找日期显示位置的索引。使用s.indexOf/的简单版本,并确定是否为两位数的日期 您也可以使用模式来实现这一点
Pattern pattern = Pattern.compile("\d{2}\/\d{2}\/\d{2}\/");
Matcher matcher = pattern.matcher(s);
startDateIdx = matcher.start();
endNumberIdx = s.indexOf(" ");
String number = s.substring(0,endNumberIdx-1);
String reference = s.substring(endNumberIdx+1,startDateIdx-1);
String[] parts = s.subtring(startDateIdx).split(" ");
String date = parts[0];
String one = parts[1];
String sd = parts[2];
String dd = parts[3];
String tt = parts[4];
String vs = parts[5];
有没有理由不用逗号替换空格分隔符?我无法修改输入。该字符串是读取.PDF创建的文本文件中的一行。PDF是一个表,我想将其转换为tableModel,并从PDF表中创建一个jTable。如果您不想使用正则表达式,并且问题只是您描述的问题,那么这是一个愚蠢的解决方案:在空格处拆分,一旦您读取日期,就检查它是否为有效日期。如果没有,请将所有日期文本附加到引用中,否则只需读取日期并继续。有没有理由不将空格分隔符替换为逗号?我无法修改输入。该字符串是读取.PDF创建的文本文件中的一行。PDF是一个表,我想将其转换为tableModel,并从PDF表中创建一个jTable。如果您不想使用正则表达式,并且问题只是您描述的问题,那么这是一个愚蠢的解决方案:在空格处拆分,一旦您读取日期,就检查它是否为有效日期。如果没有,请将所有日期文本附加到引用中,否则只需读取日期并继续。