2016-05-13 8 views
0

の最初の部分を無視:1234_my_string.txtすることはそれほど文字列の値がmy_stringに等しくなる1234_を切り落とすために提供される一つよりも良い方法があります。 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

を、あなたは持っています文字列str = "1234_my_string.txt"とあなたは "1234"を破棄していますか? – ryekayo

+0

分割する文字の量がわかっている場合は、[substring()](http://www.tutorialspoint.com/java/java_string_substring.htm)メソッドを使用できます。定数でない場合は、分割を行い、最初の配列の長さを確認してそこから移動することができます。 – Childishforlife

+0

@ryekayo私は "1234_"を捨て去ろうとしています。 – Turtle

答えて

4

あなただけにして最初の_までを含むすべてのものを取り除きたい場合は、1つの簡単な方法だけで正規表現を使用して""でそのセクションを置き換えるために、次のようになります。私は、これは非常に効率的であるとは思いません。

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

おそらく最も簡単な解決策は、あなたの文字列は、あなたものようなものを使用することができる少なくとも1つの_が含まれていることを確信している場合

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

次のようになります。明確化のため

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

*文字列に少なくとも1つの '_'が含まれていることが確かな場合*最初の解決策は例外をスローします。 – shmosel

+0

shmosel @ Turtleが修正されました。 – Pshemo