2017-03-13 10 views
0

編集:文字列内の文字を大文字にするためにindexOf位置を使用しようとしています

すべてのコードを1つのプログラムにコンパイルしようとしました。今必要なのは、メソッドから変更された文字列を返す方法を理解することだけです。これを達成するためには何を入れなければなりませんか?

 public class String_Fixer { 

      public static void main(String[] args) { 

       String userInput, newString; 
       Scanner keyboard = new Scanner(System.in); 
       System.out.println("This program takes sentences and capitalizes them for you."); 
       System.out.println("Please write a few sentences."); 
       System.out.println(""); 
       userInput = keyboard.nextLine(); 
       System.out.println(""); 


       System.out.println("Here is the original sentence:"); 
       System.out.println(userInput); 
       System.out.println(""); 
       System.out.println("And here is the modified sentence:"); 
       System.out.println(); 
      } 

      public static List<Integer> stringFixer(String userInput) { 
       List<Integer> indexes = new ArrayList<>(); 
       int first = 0, offset = 2, index, offset_index; 
       while ((index = userInput.indexOf('.', first)) != -1) { 
        offset_index = index + offset; 
        if (offset_index < userInput.length()) { 
         indexes.add(offset_index); 
        } 
        first = index + 1; 
       } 
       while ((index = userInput.indexOf('?', first)) != -1) { 
        offset_index = index + offset; 
        if (offset_index < userInput.length()) { 
         indexes.add(offset_index); 
        } 
        first = index + 1; 
       } 
       return indexes; 
      } 

      public static String CapatilizeChars(List<Integer> indexes, String string) { 
       StringBuilder newString = new StringBuilder(string); 
       for (int i : indexes) { 
        char capChar = Character.toUpperCase(newString.charAt(i)); 
        newString.setCharAt(i, capChar); 
       } 
       return newString.toString(); 
      } 

     } 

答えて

0

が文字の大文字のバリアントを取得するためにCharacter.toUpperCase(CHARACTER);メソッドを使用します。

はここに新しいコードです。

この記事を参照してください:Indexes of all occurrences of character in a string文字列内の文字のすべてのインデックスを検索する方法については、

編集:

ここではどのように問題に取り組みますか。まず、この方法を使用して変更する必要がインデックスを取得:

public static List<Integer> getIndexesOf(String regex, String stringToCheck, int offset) { 

    List<Integer> indexes = new ArrayList<>(); 

    // Where to begin each indexof operation 
    int first = 0; 

    // The direct indexof result 
    int index; 
    // The indexof result offset by the specified amount 
    int offset_index; 

    // While we are still getting results from index of, save result under index and loop 
    while ((index = stringToCheck.indexOf(regex, first)) != -1) { 

     offset_index = index + offset; 

     // If the offset index doesn't excede the strings length add it to list 
     if (offset_index < stringToCheck.length()) { 

      indexes.add(offset_index); 

     } 

     first = index + 1; 

    } 

    return indexes; 

} 

そして、この方法を使用して、各指標を大文字:

public static String CapatilizeChars(List<Integer> indexes, String string) { 

    StringBuilder newString = new StringBuilder(string); 

    // For each index capatilize the specified char 
    for (int i : indexes) { 

     char capChar = Character.toUpperCase(newString.charAt(i)); 

     newString.setCharAt(i, capChar); 

    } 

    return newString.toString(); 

} 

これはそれを行うための最速の方法はありませんが、それは持っていますこのメソッドの利点は、特定のcapitalize_char_after_regexメソッドよりも有用です。 2つ目のメソッドのforループ内でコードを1つ目のメソッドに入れることで、これを1つのメソッドに簡単に組み合わせることができます。あなたが使用していないので、String modifiedString = StringFixer.CapatilizeChars(StringFixer.getIndexesOf(userInput), userInput);

そしてgetIndexesOf方法からregexパラメータを削除:

EDIT 2:あなたの更新されたコードのための

修正:StringFixer modifiedString = new StringFixer();

で:

は交換してくださいそれらをあなたのアプリケーションに入れてください。

私があなたに与えたメソッドは静的です。つまり、オブジェクトのインスタンスに関連付けられていません。つまり、それらを使用するには、StringFixerクラスを構築する必要はありません。

+0

括弧内には指定したindexOf位置を置く必要がありますか? – Brandon

+0

私はこれをやってみましたが、プログラムには範囲外のエラーがあります。 – Brandon

+0

いいえ、このメソッドは文字を受け取り、大文字のバリアントを返します。だから、索引を見つけ、 'String.charAt(index);'を使って、変更したい文字の索引の文字を取得します。次に 'StringBuilder'を使用して文字列の文字を' YOUR_STRING_BUILDER.setCharAt(newChar、index); 'を使って新しい大文字に置き換えます; – Jdman1699

関連する問題