如何在最后一次设置字符时拆分字符串?

时间:2014-04-16 10:29:51

标签: java string split

我有一个看起来像这样的文本文件,

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 |"在那条线上。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:3)

  1. 反向字符串
  2. 首次出现分隔符字符串时拆分
  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);
}