假设我有这个字符串:
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->”。
这只是一个示例字符串。我想将这个函数实现到一个更大的项目,其中字符串的格式为多行,我希望substring
与indexOf
。
答案 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