如何使用多行(没有Json)对字符串进行子串,而不替换它们

时间:2015-05-18 12:26:02

标签: java string

假设我有这个字符串:

String test = "(\n"+
            "string 2 this is \n"+
            "string 3 this is \n"+
            "string 4 this is,\n"+";

test.substring (test.indexOf ("string 2"), (test.indexOf ("3 this");

substring目前无效,因为新行符合我的方式。有没有办法在不删除新行的情况下绕过这个?

我想要的字符串是从字符串2到“字符串3这个”的所有内容。我想删除“字符串4->”。

这只是一个示例字符串。我想将这个函数实现到一个更大的项目,其中字符串的格式为多行,我希望substringindexOf

3 个答案:

答案 0 :(得分:1)

String fromTo( String s, String from, String to ){
    int pos1 = s.indexOf( from );
    int pos2 = s.indexOf( to ) + to.length();
    if( pos1 < 0 || pos2 < pos1 ){
        throw new IllegalArgumentException("no such delimiting strings");
    }
    String res = s.substring( pos1, pos2 );
    return res;
}

在您的示例中,您可以致电

String section = fromTo( test, "string 2", "string 3 this" );

这将包含换行符,但您写道“不删除换行符”。

如果您不想使用换行符,可以轻松地从res中删除它们。

res = res.replace( "\n", "" );

答案 1 :(得分:0)

好像你期望indexOf考虑它的论点的长度:它不会。

尝试:

String limitStr = "3 this";

test.substring(test.indexOf("string 2"), test.indexOf(limitStr) + limitStr.length());

结果将包括换行符。

一般要点:在使用之前,请始终检查indexOf-1的返回值。

答案 2 :(得分:0)

修复一些编译器错误后,这很有效:

@Test
public void testName() throws Exception
{
    String test = "(\n"+
            "string 2 this is \n"+
            "string 3 this is \n"+
            "string 4 this is,\n"; // removed +" here

    String result = test.substring(test.indexOf ("string 2"), (test.indexOf ("3 this"))); // Added )) here and assigned the result to a variable
    System.out.println(result);
}

打印

string 2 this is 
string