2016-05-13 58 views
0

如果我有这样的字符串:1234_my_string.txt有比提供给砍掉了1234_因此字符串的值将等于my_string一个更好的办法。 txt

为了清楚起见,我想丢弃一切,直到包括字符串中的第一个'_'。该字符串不一定等于“1234_my_string.txt”。第一个'_'之前的字符长度未知。

伪代码:忽视分割字符串的第一部分

String str = "1234_my_string.txt"; 
do foo 
str == my_string.txt 

这里是一个工作示例我现在有哪些检查str的值,然后分割并重新加入字符串来获得所需的结果。我想要删除的字符的大小不知道。我不认为这是非常有效的:

 if(str != null && !str.equals("")) 
     { 
      String [] strParts = str.split("_"); 
      val = ""; 

      for (int i = 1; i < strParts.length; i++) 
      { 
       str += strParts[i]; 
       str += "_"; 
      } 

      str = str.substring(0, str.length()-1); 
     } 
+0

为了澄清,你有String str =“1234_my_string.txt”,你正在寻找放弃“1234”? – ryekayo

+0

如果你知道你想分解的字符数量,你可以使用[substring()](http://www.tutorialspoint.com/java/java_string_substring.htm)方法。如果它不是恒定的,你可以做一个分割并检查第一个数组的长度并从那里开始。 – Childishforlife

+0

@ryekayo我期待放弃“1234_” – Turtle

回答

4

如果你只是想摆脱一切,直至并包括第一_,一个简单的方法也只是使用正则表达式,并与""替换部分。

例如

String str = "1234_my_string.txt"; 
str = str.replaceFirst("[^_]*_", ""); 
System.out.println(str); // my_string.txt 
+1

'replaceFirst(“。*?_”,“”)''怎么样? – shmosel

+0

@shmosel当然,这也有效。 – azurefrog

+1

@shmosel'[^ _] *'比'。*?'更有效率,因为它避免了回溯。 – Pshemo

7

也许最简单的解决办法是

str = str.substring(str.indexOf('_') + 1); 

如果你确信你的字符串将包含至少一个_,你也可以使用类似:

str = str.split("_", 2)[1]; 
//  splits max into two parts 
//  [1] get second part (the one after "_") 
+2

*如果你确定你的字符串至少包含一个'_' *如果你不是,第一个解决方案会抛出异常。 – shmosel

+0

shmosel @Turtle固定。 – Pshemo