1

2 つの文字列を取り、文字列 1 の括弧内の単語を文字列 2 の括弧内の単語に置き換えた 1 つの文字列を返すメソッドを作成しようとしていますが、理解できない問題が発生しています。例として

replaceText("a (simple) programming (example)", "(cool) (problem)") 

戻るべき

"a cool programming problem" 

replaceText("a ((nested) example) with (three) replacements (to (handle))", 
            "the replacements are (answer) and (really (two) not three)") 

戻るべき

"an answer with really (two) not three replacements " 

ループ、基本的な String メソッド (.length()、.charAt())、これを行うための基本的な StringBuilder メソッド、および Character メソッドしか使用できませんが、深刻な問題に直面しています。

今、これは私のコードです

public class loopStringAnalysis {

public static String replaceText (String s1, String s2){
StringBuilder newStringBuild = new StringBuilder ();
int count = 0;
int count1 = 0;
for (int i = 0, i1 = 0; i < s1.length() && i1 < s2.length(); i = i + 1){
  if (s1.charAt(i) == '(')
    count = count + 1;
  else if (s1.charAt(i) == ')')
    count = count - 1;
  else if (count == 0)
    newStringBuild.append(s1.charAt(i));
  else if (count != 0){
    while (count1 == 0) {
      if (s2.charAt(i1) == '(')
        count1 = count1 + 1;
      else if (s2.charAt(i1) == ')') 
        count1 = count1 - 1; 
      i1 = i1 + 1;
    }
    while (count1 != 0) {
      if (s2.charAt(i1) == '(')
        count1 = count1 + 1;
      else if (s2.charAt(i1) == ')')
        count1 = count1 - 1;
      else if (count1 != 0)
        newStringBuild.append(s2.charAt(i1));
      i1 = i1 + 1;
    }
    while (count != 0) {
      if (s1.charAt(i) == '(')
        count = count + 1;
      else if (s1.charAt(i) == ')')
        count = count - 1;
      i = i + 1;
    }
  }
}
return newStringBuild.toString();
}   

最初の例では「クールなプログラミング プロジェクト」が返され、2 番目の例では「3 つではなく 2 つある回答」が返されます。この方法には問題があることはわかっていますが、どこにあるのかわかりません。コードを修正するための助けをいただければ幸いです。

4

2 に答える 2

0

あなたがこれまでに書いたコードは不必要に複雑だと思います。文字列をループして開き括弧と閉じ括弧を探す代わりに、String メソッドを使用します。

String.indexOf(char c)

かっこのインデックスを見つける。この方法では、最初の文字列をループする必要はありません。この方法を使用できない場合はお知らせください。さらにサポートを提供できるよう努めます。

于 2013-10-13T21:43:15.333 に答える
-1

これを試して:

public class loopStringAnalysis {

    public static String replaceText(String s1, String s2) {
        StringBuilder newStringBuild = new StringBuilder();
        int count = 0;
        int count1 = 0;
        for (int i = 0, i1 = 0; i < s1.length() && i1 < s2.length(); i = i + 1) {
            if (s1.charAt(i) == '(') {
                count = count + 1;
            } else if (s1.charAt(i) == ')') {
                count = count - 1;
            } else if (count == 0) {
                newStringBuild.append(s1.charAt(i));
            } else if (count != 0) {
                while (count1 == 0) {
                    if (s2.charAt(i1) == '(') {
                        count1 = count1 + 1;
                    } else if (s2.charAt(i1) == ')') {
                        count1 = count1 - 1;
                    }
                    i1 = i1 + 1;
                }
                while (count1 != 0) {
                    if (s2.charAt(i1) == '(') {
                        count1 = count1 + 1;
                    } else if (s2.charAt(i1) == ')') {
                        count1 = count1 - 1;
                    }
                    if (count1 != 0) {
                        newStringBuild.append(s2.charAt(i1));
                    }
                    i1 = i1 + 1;
                }
                while (count != 0) {
                    i = i + 1;
                    if (s1.charAt(i) == '(') {
                        count = count + 1;
                    } else if (s1.charAt(i) == ')') {
                        count = count - 1;
                    }
                }
            }
        }
        return newStringBuild.toString();
    }

    public static void main(String [] args){
        System.out.println(replaceText("a ((nested) example) with (three) replacements (to (handle))",
            "the replacements are (answer) and (really (two) not three)"));
    }
}

これが機能するかどうか教えてください。

于 2013-10-13T21:47:32.477 に答える