2017-10-07 1 views
0

私は自分のコーディングスキルを向上させようとしており、この作業に遭遇しました: "この演習の目的は、文字列を新しい文字列に変換することです。新しい文字列の各文字は 'その文字が元の文字列に複数回現れた場合は ')、文字が重複しているかどうかを判断する際には大文字を無視します。PatternSyntaxException:インデックス1の近くの非公開グループ。私のチェックがうまくいかないのはなぜですか?

例外をスレッド「メイン」java.util.regex.PatternSyntaxExceptionに:インデックス1 (^

近くに閉じられていないグループIはかなり得ることはありませんあなたはfollwingエラーが表示されます私の解決策を、見ることができるの下 なぜこのエラーが出るのですか、私はグループマッチング/パターンなどを使用していません。私はなぜそれが出現するかも知れないと思っていましたが、修正が機能しませんでした(下のコードでコメントされています)。

私のコードはあなたに馬鹿に見えるかもしれません、私は最初にハッシュマップを作成し、すべての文字を保存し、そのキーに値を割り当てます(または)与えられた単語に何回出現するかによって異なります。その後、私は自分のHashMap全体を反復し、キーのすべての出現をその値で置き換えます。私はそれが効率的かもしれないと考えました。少なくとも私はなぜこれを達成しようとしているのかを知っていますし、空白や括弧のような特殊文字を含まない文字列に対しても機能します。

ああ、btw、私は自分自身で問題を見つけることができない、私のことに関連しているような問題を読んだ後でさえ、私は本当に不満です。あなたがこれらの問題にもっと近づく方法を私に一般的な示唆があれば、私はあなたの提案を聞いてうれしく思います!あなたが正規表現ここ

結果= result.replaceAll(Character.toString(C)、Character.toString(replaceMap.getの(c)))を使用

import java.util.HashMap; 

public class DuplicateEncoder { 
    static String encode(String word) { 
     HashMap<Character, Character> replaceMap = new HashMap<>(); 
    char[] charArray = word.toLowerCase().toCharArray(); 

    for (char c : charArray) { 
     if (!replaceMap.containsKey(c)) { 
      int count = 0; 
      for (char c2 : charArray) { 
       if (c2 == c) { 
        count++; 
       } 
      } 
      if (count > 1) { 
       replaceMap.put(c, ')'); 
      } else { 
       replaceMap.put(c, '('); 
      } 
     } 

    } 
    String result = word.toLowerCase(); 


    for (char c : replaceMap.keySet()) { 
     // if(result.indexOf(c)>=0) { 
      result = result.replaceAll(Character.toString(c), Character.toString(replaceMap.get(c))); 
     // } 
    } 
    return result; 
} 

public static void main(String[] args){ 
    String s = "Prespecialized"; 
    System.out.println(DuplicateEncoder.encode(s)); 
    s = " ()( "; 
    System.out.println(DuplicateEncoder.encode(s)); 
} 


} 

答えて

1

。 //}

Check String.replaceAll docs。あなたの文字が '(')の場合、この例外が発生しています。代わりにString.replace(char、char)を試してください。

+0

すごくお返事ありがとうございました。私はすべての文字を繰り返し処理する必要はない、それは報われなかったと思います。 – InDaPond

関連する問題