0

ランダムに生成された 2 つの文字列があるとします。

生成された 2 つの文字列で単一の文字列を作成し、それらを分割して元の 2 つの文字列を後で使用できるようにするにはどうすればよいですか?

たとえば、「[aweiroj\3aoierjvg0_3409」と「4093 w_/e9」があります。これらの 2 つの単語を元の 2 つの文字列に分割しながら、これらの 2 つの単語を 1 つの変数にアタッチするにはどうすればよいですか?

私の問題は、.spit() の正規表現が見つからないように見えることです。これらの 2 つの文字列には任意の文字 (アルファベット、整数、\、/、スペースなど) を含めることができるためです。

編集

これが使用できる実際のケースを考えただけです。場合によっては、ネットワーク (HTTP) 経由でプレーン テキストを送信する方が、xml や json よりも優れています。高速ブロードバンドの低速サーバー - xml または json を使用し、低速ブロードバンドの高速サーバー - プレーン テキストを使用します。以下の回答により、プレーンテキストの挿入を防ぐことができます。ただし、これらの方法はベンチマークまたはテストされていないため、実際に使用する前にこれらの方法をテストすることになるでしょう。

4

4 に答える 4

9

簡単に言えば、そうしないでください。配列、または 2 つのデータ メンバーを持つクラスを使用しますが、文字列を 1 つの文字列に結合することはおそらく悪い考えです。

しかし、本当にあいまいなユースケースがある場合は、次のことができます。

  1. のように、十分に一意な区切り文字を作成します"<<Jee Seok Yoon's Delimiter>>"

    final static String DELIM = "<<Jee Seok Yoon's Unique Delimiter>>";
    String a = /*...*/;
    String b = /*...*/;
    String combined = a + DELIM + b;
    
    int breakAt = combined.indexOf(DELIM);
    String a1 = combined.substring(0, breakAt);
    String b1 = combined.substring(breakAt + DELIM.length());
    
  2. 文字列に存在する場合は、エスケープするより単純な区切り文字を用意してください。

  3. 最初の文字列の長さを記憶し、統一された文字列に格納し、その後に「長さの終わり」の区切り文字を付けます。

    String a = /*...*/;
    String b = /*...*/;
    String combined = String.valueOf(a.length()) + "|" + a + b;
    
    int breakAt = combined.indexOf("|");
    int len = Integer.parseInt(combined.substring(0, breakAt), 10);
    String a1 = combined.substring(breakAt + 1, len);
    String b1 = combined.substring(breakAt + 1 + len);
    

(両方のコード例は完全にすぐに使えるものであり、テストされていません。)

于 2013-09-10T15:25:53.247 に答える
4

両方の文字列を保持し、それらを別々に印刷して結合できるクラスを作成します。

addこれは単に ArrayList を拡張するだけなので、再実装する必要はありませんget

public class ConcatedString extends ArrayList<String>
{

    public String concated() {
        StringBuilder b = new StringBuilder();

        for (String string : this)
        {
            b.append(string);
        }

        return b.toString();
    }
}
于 2013-09-10T15:26:19.130 に答える