こんにちは。
与えられた文字列を分解する処理を行う下記のソースについて、ご意見を頂ければと思います。
###前提・実現したいこと
使用言語:Java
与えられる文字列には、「&」または「|」が含まれている可能性があり、半角、全角を問わず「&&」「||」であれば文字として扱い、「&」であれば「AND」、「|」であれば「OR」として扱います。
例)
「A&&B」→「A&B」
「A&&B」→「A&B」
「A&B」→「A AND B」
「AB|」→「AB OR」
また、上記のように変換した後でクエリとして実行し、取得結果に対しての突き合わせに利用する想定です。
例)
「A&&B|C||D」→「'A&B' OR 'C|D'」としてクエリを実行
→取得結果に対して、「A&B」または「C|D」のどちらに一致したか判定したい。
###発生している問題
上記を実現するために、「A&&B」であれば、「A&B」として配列に格納、「A&B」であれば「A」「&」「B」として配列に格納するような処理を考えました。
処理の記載は行ったのですが、どうしてもわかりづらいソースになってしまい、他に書きようはないのかと模索しています。
###ソースコード
for (String str : this.wordList) { String tempStr = str.replace("&", "&").replace("|, "|"); String checkStr = ""; for (int i = 0; i < str.length(); i++) { indexA = tempStr.indexOf("&", i); indexO = tempStr.indexOf("|", i); if (-1 == indexA || -1 == indexO) { index = indexA == -1 ? indexO : indexA; } else { index = indexA < indexO ? indexA : indexO; } if (-1 == index) { if (0 == i) { arrayList.add(str); break; } else { if (-1 != wordStart) { checkStr += str.substring(i); array.add(checkStr); } break; } } else { if (-1 == wordStart) { wordStart = i; } if (index + 1 == str.length()) { if (wordStart == index) { arrayLlist.add(tempStr.substring(index, index + 1)); } else { checkStr += str.substring(wordStart, index); arrayList.add(checkStr); arrayList.add(tempStr.substring(index, index + 1)); } break; } else { if (tempStr.substring(index, index + 1).equals(tempStr.substring(index + 1, index + 2))) { if (i != index) { checkStr += str.substring(i, index); } i = index + 1; checkStr += str.substring(index + 1, index + 2); } else { if (wordStart == index) { arrayList.add(tempStr.substring(index, index + 1)); wordStart = index + 1; } else { i = index; checkStr += str.substring(wordStart, index); arrayList.add(checkStr); arrayList.add(tempStr.substring(index, index + 1)); wordStart = -1; } } if (str.length() == i + 1 && (-1 != wordStart)) { arrayList.add(checkStr); } } } } }
以上、宜しくお願い致します。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/01 14:35