2017-09-26 1 views
2

java. 지정된 길이의 텍스트의 무작위로 선택된 부분 문자열을 반환하려면 난수 생성기를 사용해야합니다. 길이가 부의 값의 경우, 또는 텍스트의 길이보다 큰 경우, 메소드는 IllegalArgumentException를 throw합니다. 예를 들어, chooseSubstring ("abcde", 4, 새로운 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'에서 '길이'(배타적)까지의 값입니다. 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

오, 하위 문자열을 사용하는 다른 방법을 사용하고 있습니다. 따라서 시작점 대신에 종점에 길이를 사용합니다. 도움을 주셔서 감사합니다. –

관련 문제