2017-09-26 9 views
2

java。 指定された長さのテキストのランダムに選択された部分文字列を返すには、乱数ジェネレータを使用する必要があります。長さが負またはテキストの長さより大きい場合、メソッドはIllegalArgumentExceptionをスローする必要があります。例えば、chooseSubstring( "abcde"、4、new Random())は約半分の時間で "abcd"を返し、半分の時間で "bcde"を返します。文字列変数を指定された長さのランダムな部分文字列に分割します。

public static String chooseSubstring (String text, int length, Random rand) 
{ 
    int randomNum = rand.nextInt(length); 
    String answer = text.substring(randomNum); 
    return answer; 
} 

基本的に、私は変数テキストから部分文字列を返すようにしたいです。部分文字列は可変長の長さでなければなりません。この部分文字列の先頭は、乱数ジェネレータによって決定されるランダムな位置から開始する必要があります。私の問題は、乱数ジェネレータが部分文字列が正しい長さであることを確認していないことです。

 System.out.println(chooseSubstring("abcde", 4, new Random())); 

は倍のほぼ同じ量abcdbcdeを返す必要があります。代わりに返信しています: bcde cde de abcde これを解決する方法についての情報は、大変感謝しています!

+0

'randomNum'は' 0'から 'length'(排他)までの値です。 0,1,2,3のいずれかになります。 –

答えて

1

コードでは、0からlengthまでの任意のインデックスで部分文字列が使用されています。終わりのインデックスを指定して、文字列の最後まで拡張しないようにする必要があります。また、終了インデックスが文字列を超えないように開始インデックスの範囲を減らす必要があります。

int randomNum = rand.nextInt(text.length() - length + 1); 
String answer = text.substring(randomNum, randomNum + length); 
+0

答えがあれば、毎回完全な文字列が返されます。 –

+0

@ ZacharyKingが修正されました。 – shmosel

+0

他の方法で部分文字列を使用しています。したがって、開始点の代わりに、終了点の長さも使用します。それは今明らかに助けてくれてありがとう! –

関連する問題