我有一个看起来像这样的文本文件,
sku_id||01276116147620|L|
s_code||01276116|L|
s_prnt_prd||147620|L|
s_clr_fmly||White|L|
s_disp_clr||White|L|
s_size_desc||L|L|
s_status_str||Clearance|L|
s_ftr_cd||0|L|
目前,我将整个内容读到缓冲读卡器并创建一个字符串。然后我使用split函数来分割" | L |"字符。在s_size_desc || L | L |行之前,这一切都很好。这里的分割功能并没有按预期工作。我希望它在第二次出现时将它拆分为" | L |"在那条线上。我怎样才能做到这一点?
答案 0 :(得分:3)
答案 1 :(得分:0)
请记住,如果您排序/反向等,您必须计算这样做的成本。
但这是一种可能性,你只需要替换虚假的| L |分裂后 -
String st = "sku_id||01276116147620|L|s_code||01276116|L|s_prnt_prd||147620|L|s_clr_fmly||White|L|s_disp_clr||White|L|s_size_desc||L|L|s_status_str||Clearance|L|s_ftr_cd||0|L|";
for(String ss : st.split("\\|L\\|")) {
System.out.println(ss.replaceAll("L\\|", ""));
}
答案 2 :(得分:0)
尝试使用贪婪的正则表达式,即尽可能匹配尽可能多的文本。例如,在扩展正则表达式中,
(L\\|)+
将匹配一个或多个" L |",并且将尽可能多地匹配,包括第二个" L |"在你有问题的路线。因此,将字符串拆分为这样的正则表达式。
答案 3 :(得分:0)
你可以使用正面外观,后面只使用|L|
,如果之前包含一个字符或数字,
String str="Your entire string";
str.split("(?<=\\w)\\|L\\|");
这应该有用。
答案 4 :(得分:0)
假设您想要拆分的|L|
始终位于行末,您可以使用
yourString.split("(?m)\\|L\\|$")
(?m)
是正则表达式多行标记,它使^
和$
个锚点匹配行的开头和结尾(而不是整个字符串的开头和结尾)。
如果没有行分隔符,其他方式尝试将检查是否在|L|
之后拆分,没有L|
之类的
yourString.split("\\|L\\|(?!L\\|)")
另一种解决方案是在从文件中读取数据时创建没有|L|
的数组。
Scanner scanner = new Scanner(new File(yourFile));
while(scanner.hasNextLine()){
String line = scanner.nextLine();
int lastIndex = line.lastIndexOf("|L|");
String lineWithoutL = line.substring(0,lastIndex);//do what you want with it
System.out.println(lineWithoutL);
}