スライディングウィンドウ/ 2Dアレイの縮小に基づいて分割文字列

Junaid388:

私は複数の区切り文字の文字列の断片を作成しようとしています。たとえば、私は、次の文字列を持っています。

慢性リンパ性白血病::小リンパ球性リンパ腫

私が最初にこの区切り文字に基づいて文字列を分割する必要があります::

その部分は簡単です。

私は以下のルールに基づいてフラグメントを生成する必要があるサブストリング(ターム)のそれぞれから、

単語A、B及びCから成る用語は、すなわち、 'ABC' は 'ABC'(0)、 'AB'(1)、 'BC'(2) 'A'(3)、 'B' に分割されています(4)、 'C'(5)

用語の長さが固定されていません。これは3つの以上の単語または以下とすることができます。

ロジックは、用語の各単語だけ縮小ウィンドウロジックの配列内の次の単語に連結されなければならないということです。だから、最初の単語はAであり、それはそれの後にBCを持っています。次のコンボはABになり、次のC.になりますので、右から左へのAB C.、ウィンドウの収縮になります組み合わせはそう

その用語の場合はABCDの出力断片は次のようになります

'ABC D'
'AB C'、
'A、B'、
'A'、
'BC D'、
'B C'、
'B'、
'C D'、
'C'、
'D'

用語のABCDEの場合には出力の一部は次のようになります

'ABCD E'、 'ABC D'、 'AB C'、 'A B'、 'A'、 'BCD E'、 'BC D'、 'BC、' B」、 'CD E'、 'C​​ D' 、 'C'、 'D ​​E'、 'D'、 'E'

「慢性リンパ性白血病」と「小リンパ球性リンパ腫」は、上記の2つの項です。

慢性リンパ性白血病Iの必要性のために出力され

慢性リンパ性白血病
、慢性リンパ性
慢性
リンパ性白血病
リンパ
性白血病

私は2次元配列にこれを分割し、それらを反復処理し、それらを連結しようとしようとしていますが、私は、道路のブロックを打つています

String str="Chronic Lymphocytic Leukemia :: Small Lymphocytic Lymphoma";
String[] rows=str.split("::");
String[][] table=new String[rows.length][];
for (int i=0; i<rows.length;i++)
  {
     table[i]=rows[i].split(" ");
  }

for (int i=0;i<table.length;i++)
  {
    for(int j=0;j<table[i].length;j++)
      {
        System.out.println(table[i][j]);
      }
  }

私はこれを達成することができますどのように任意のアイデア

user85421:

ほぼストレートフォワード:

  • ループを選択する最初の単語を、
  • 最初の内側の第二のループを選択し、後方を進んで、最終的に言葉を。
  • あなただけの結果に単語アドオンに参加する必要があり、そのループ内で

何かのようなもの:

List<String> fragments(String[] words) {
    var result = new ArrayList<String>();
    for (var i = 0; i < words.length; i++) {
        for (var j = words.length; j > i; j--) {
            result.add(Arrays.stream(words, i, j).collect(Collectors.joining(" ")));
        }
    }
    // result.remove(0);  // if you don't want the whole sequence inside the result
    return result;
}

、何らかの理由で、場合streamオプションではありません、第3のループは、単語を収集するために必要とされています。

List<String> fragments(String[] words) {
    var result = new ArrayList<String>();
    for (var i = 0; i < words.length; i++) {
        for (var j = words.length; j > i; j--) {
            var fragment = new StringBuilder();
            for (var k = i; k < j; k++) {
                if (k > i) {
                    fragment.append(" ");
                }
                fragment.append(words[k]);
            }
            result.add(fragment.toString());
        }
    }
    // result.remove(0);  // if you dont want the whole sequence inside the result
    return result;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=235149&siteId=1