String에서 교체하고 교체 횟수를 인쇄하고 싶습니다.
예)
입력 : aabba
from : aa
to : bb
ddbba replacement
: 1
입력 : AAccaabbaaaaatt
from : aa
to : bb
ddccddbbddddatt
대체 됨 : 4
여기에 문제가 있습니다.
for (int i = 0; i < input.length(); i++) {
if (inputL.indexOf(curStrL, i) > -1) {
cnt++;
i = (inputL.indexOf(curStrL, i))+1; // this part!
} else
continue;
} // for
선생님은 사용하는 것을 .indexOf 및 .replace 및 .toLowerCase을 .
그녀는 몇 가지 예를 들었고 항상 두 글자를 두 글자로 바꿉니다. 그래서 다른 글자를 찾기 위해 '+1'을 입력했습니다. 그 '+1'을 제거하면 'aaa'가 두 번 계산됩니다. (aa a와 aa. 그리고 'dda'로 바뀌었기 때문에 틀 렸습니다.)하지만 이번에는 한 글자 만 바꾸면 (ex.a) , 실제 필요한 것보다 적은 수를 계산합니다. (예 : 'aaa'는 두 번만 계산됩니다.)
교사의 예에서는 모두 두 글자를 대체하기 때문에 잘 작동합니다. 그러나 나는 이것을 개선하고 싶다.
내 코드는 모두 다음과 같습니다.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (true) {
System.out.print("Input : ");
String input = scan.next();
System.out.print("from : ");
String curStr = scan.next();
System.out.print("to : ");
String chStr = scan.next();
String inputL = input.toLowerCase();
String curStrL = curStr.toLowerCase();
String chStrL = chStr.toLowerCase();
String output = inputL.replace(curStrL, chStrL);
int cnt = 0;
if (inputL.indexOf(curStrL) == -1) {
System.out.println("Do it again");
} else
System.out.println(output);
for (int i = 0; i < input.length(); i++) {
if (inputL.indexOf(curStrL, i) > -1) {
cnt++;
i = (inputL.indexOf(curStrL, i))+1;
// *** to make the code find from the next letter! ***
} else
continue;
} // for
if (cnt > 0)
System.out.println("replaced : " + cnt);
else
{System.out.println("can't replace. Do it again");
break;}
System.out.println("----------------");
} // while
} // main
교체 할 문자열의 길이로 루프의 카운터 변수를 늘리십시오.
for (int i = 0; i < input.length(); i++) {
if (inputL.indexOf(curStrL, i) > -1) {
cnt++;
i = (inputL.indexOf(curStrL, i)); // EDIT by Shraft
i = i + curStr.length() - 1; // EDIT
// *** to make the code find from the next letter! ***
} else
continue;
} // for
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다