【问题标题】:java separate string on first line break [duplicate]java在第一个换行符处分隔字符串[重复]
【发布时间】:2014-07-08 12:25:33
【问题描述】:

在检测字符串中的第一个换行符时,是否有任何有效的方法将字符串分成两部分

例如,这样的字符串:

String str = "line 1\n"+
             "line 2\n"+
             "line 3\n";

所以我想做的只是将“第 1 行”从字符串中分离出来,其余的作为另一个字符串,所以最终结果如下:

string1 = "line 1";
string2 = "line 2\n"+
          "line 3\n";

【问题讨论】:

标签: java string split


【解决方案1】:

您可以使用 String 类的split(regex,limit) 方法。试试

String[] result = yourString.split("\n", 2);

如果你想使用操作系统相关的行分隔符

String[] result = yourString.split(System.lineSeparator(), 2);

或独立于操作系统的方式

//since Java 8
String[] result = yourString.split("\\R", 2);

//before Java 8
String[] result = yourString.split("\r\n|\r|\n", 2);

现在

result[0] = "line 1";
result[1] = "line 2\nline 3\n";

【讨论】:

  • MacOS 使用\r 作为行分隔符,请用\r|\n|\r\n 修复正则表达式
  • @DmitryGinzburg 您说得对,需要包含 Mac 分隔符,但您的正则表达式无法按预期工作,因为它会在 \r\n 上创建两个拆分,一个用于 \r,一个用于 \n,因为正则表达式从左到右解释。这就是为什么\r\n 应该在\r\n 之前。无论如何,感谢您指出这一点。
  • 您可能是对的,正确的正则表达式应该是\r|\n|(\r\n)。或者只是(\r?\n)|\r
  • @DmitryGinzburg 我的意思是像foo|bar|foobar 这样的正则表达式永远不会匹配foobar,因为它会更早地搜索foobar,这将消耗foobar 的部分。一般规则是在更一般的正则表达式之前将更详细的正则表达式放在regex1|regex2|regex3 中。这就是为什么\r\n 应该放在\r\n 之前,就像我回答中的正则表达式一样。 “或者只是\r?\n|\r”是的,这个可以正常工作。
【解决方案2】:

试试String.substring()

String str23 = "line 1 \n line 2 \n line3 \n";
String line1 = str23.substring(0, str23.indexOf("\n"));
String line2 = str23.substring(str23.indexOf("\n")+1, str23.length());

System.out.println(line1+"-----"+line2);

【讨论】:

    【解决方案3】:
    String str = "line 1\n line 2\n line 3\n";
    
    int newLineIndex = str.indexOf("\n");
    
    String first = str.substring(0, newLineIndex);
    String rest = str.substring(newLineIndex + 1);
    

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多