私が知っている限り、あなたが分割すると言った文字を分割して保持する分割方法はありません(この場合は\n
とE|
)。私が理解しているとおり、E|
は残したいが、\n
をダンプしたいと思う。この問題を解決するには、これを行うための独自の方法を書くことができます。
public static void main(String[] args) {
String string = "T|True|25.05.2016 16:21:59\n" +
"E|1|2|3|3|X|J\n" +
"L|2|3\n" +
"L|43|JJJ\n" +
"E|2|33\n" +
"H|24343|IADS";
String[] stringArray = splitTheString(string, new String[] {"E|", "\n"});
for(String s : stringArray) {
System.out.println(s);
}
}
メインメソッドでは、文字列変数を作成し、それに文字列を割り当てます。 (String string = "your string here"
)。それを整理しておくために、私は別のsplitTheString()
の方法をとることにしました。 2つの引数をとります:最初に分割したい文字列と2番目に文字列を含む配列を分割したいと思います。
方法については、TreeList
を使用します。データは自動的に順序付けられた方法で保存され、重複は保存されません。 また、ArrayListも使用します。両方とも入力を省くためにインポートできますが(import java.util.*
)、この例ではこれを実行しませんでした。
public static String[] splitTheString(String string, String[] regex) {
java.util.TreeSet<Integer> list = new java.util.TreeSet<>();
list.add(0);
list.add(string.length());
int fromIndex;
int toIndex;
[OK]をクリックして、何が起こっているのかを説明するために(ここのような)いくつかの点でメソッドを分割します。最初に、私はTreeSetオブジェクトを作成しました。見つかったインデックス番号を格納するために使用します。サブストリング\n
とE|
の位置のインデックス番号を見つけようとします。インデックス番号0を追加しました(開始点が必要です;文字列は0から始まり、0から始まる)。また、文字列のサイズを追加しました(文字列の最後のインデックスはサイズ-1です)。
for(String s : regex) {
toIndex = 0;
while(toIndex >= 0) {
fromIndex = toIndex + 1;
toIndex = string.indexOf(s, fromIndex);
if(toIndex >= 0) list.add(toIndex);
}
}
SPLIT - >この次の部分では、拡張for-loop(またはforeach-loop)を使用しました。配列 "regex"のすべての文字列に対して、文字列をs
という変数に格納します。したがって、最初にs
はE|
になり、それは\n
になります。 for
-loopにはwhile
-loopがあり、toIndex
が0より小さい(したがって否定的)までループします。どうして?私はストリングindexOf
メソッドを使用しています。これは、検索している文字列のインデックスを返します(引数で指定したインデックスから開始します)。文字列が見つからない場合は、-1
を返します。これらの値はすべてリストに格納されます。 (彼らが正しい順序で自動的にされている覚えていますか?)
java.util.ArrayList<String> stringList = new java.util.ArrayList<>();
int count = 0;
while(list.size() > 1) {
stringList.add(string.substring(list.pollFirst(), list.first()));
if(stringList.get(count).equals("\n")) stringList.remove(count);
else count++;
}
SPLITは - >これは、我々がArrayList
-objectを作成しています。あなたの弦を保存するために使用されます。そこで、ArrayListのadd()
メソッドを使用して、substringをstringListに追加します。部分文字列を取得するには、Stringsメソッドsubstring(fromIndex, toIndex)
を使用します。これは、fromIndexからtoIndexまでの部分文字列を返します。インデックス番号はリスト(TreeMap)から取得されます。 pollFirst()
-method(最初の値を削除して返します)とfirst()
-method(最初の値を削除しないで返しますが、最初の値を削除したので、新しい最初の値は 部分文字列が\n
と等しくないかどうかもチェックします。別の文字列値として保存されているブレークを望みません。
String[] stringArray = new String[count];
count = 0;
for(String s : stringList) {
stringArray[count] = s.replace("\n", "");
count++;
}
return stringArray;
}
すべての部分文字列がstringList-objectに追加されました。使用する配列であれば、それらを配列に追加するだけです(配列に追加する前に、 "\ n"を文字列から削除するので、追加しなかった改行に悩まされる必要はありません自分自身。
この回答が参考になりましたように願っています。不明な点がある場合や、この回答を改善するための提案がある場合は、ご意見ください。
これまでに何を試しましたか?これは、string.split()へのかなり単純な呼び出しのいくつかでなければなりません。 – bstockwell
私はこれを試しました:split( "E |")); .split( "\\ r?\\ n" + "E |")とすべての可能なバリアント –
私はあなたがしたいことを本当に得られません。 1つの文字列があります。あなたはそれを "改行"で分割します。文字列のリストを各行に1つずつ取得します。あなたはそれ以上の分割をしません。その代わりに、あなたが一緒に「属している」文字列を連結することによって構築された、新しい文字列をまとめることになります。 – GhostCat