2014-04-16 33 views
0

我有一个文本文件,它看起来像这样,如何在最后一次出现的字符串上分割一个字符串?

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

    你为什么不用'newline'呢? – tod

    +0

    最后一次出现'“| L |”'总是在行尾? – Pshemo

    +0

    是的,但问题是我正在逐行阅读并将其附加到一个字符串。然后,我将该字符串传递给另一个被分割的函数。所以它并不是一条线。整个事情就像一个字符串,如sku_id || 01276116147620 | L | s_code || 01276116 | L | s_size_desc || L | L | ...... –

    回答

    3
    1. 反向串
    2. 拆分
    +0

    +1简单而干净的解决方案! – Pphoenix

    +0

    我会试试.... –

    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\\|", "")); 
         } 
    
    0

    尝试使用贪婪的正则表达式,即尽可能匹配尽可能多的文本。例如,在扩展正则表达式,

    (L\\|)+ 
    

    将匹配的一个或多个出现的“L |”,和将匹配尽可能多的,包括第二“L |”在你的问题线。因此,像这样在正则表达式中分割字符串。

    0

    你可以用这个用正面看它的后面只使用|L|如果它包含的字符或数字之前,

    String str="Your entire string"; 
    str.split("(?<=\\w)\\|L\\|"); 
    

    这应该工作。

    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); 
    } 
    
    相关问题