2014-09-11 6 views
0

저는 사용자에게 2 개의 문자열을 묻는 간단한 Java 프로그램을 작성합니다. 그 다음에 첫 번째 문자열이 두 번째 문자열에 따라 형식이 지정되고 이에 따라 출력됩니다.예기치 않은 난독화 오류가 발생했습니다

이 처리는 두 번째 문자열의 각 문자와 일치하는 첫 번째 문자열의 모든 문자를 삭제하고 의도 한 변경 후 첫 번째 문자열을 출력하여 진행됩니다. 이것은 당혹스럽고 이해하기 어려운 것으로 보일 수 있습니다. 예를 들어

:
우리가 입력으로 다음과 같은 두 문자열있어 가정하자 :

lennon 
Ln 

출력 : 문자 'L'&의 모든 발생을 제거한 후

eo 

을 'N '첫 번째 문자열에서 (경우에 관계없이)

이것은 적절한 프로그램입니다 :

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
System.out.format("Enter 2 Strings, schmuck:%n"); 
String s1 = br.readLine(); 
String s2 = br.readLine(); 
List<Character> l = new ArrayList<>(); 
for(int i = 0; i < s1.length(); i++) 
{ 
    l.add(s1.charAt(i)); 
} 
char ch; 
for(int i = 0; i < s2.length(); i++) 
{ 
    ch=s2.charAt(i); 

    while((l.indexOf(ch)) != -1) 
    { 
     if(Character.isUpperCase(ch)) 
     l.remove(ch); 
     l.remove(Character.toLowerCase(ch)); 
    } 
} 
for(Character c : l) 
{ 
    System.out.printf("%c", c); 
} 

이것은 IndexOutOfBoundsException입니다. 나는 그것이 기분이 상쾌하고 혼란스럽고 나는 침체에 이르렀다 고 느낀다. 어리석은 실수일지도 몰라. 어떤 종류의 도움이라도 ecstatically 히 인정 될 것입니다.

+1

루프 –

+0

당신의 프로그램이 상당히 그런데, 당신이에 무엇을 기대하지 않을 때/대한 중첩 교체하지 정규식에 대한 작업을 이잖아. 'lennon'과'LN' 문자열을 사용해보십시오. 그 이유를 알아보십시오. – rix0rrr

+0

Gee ... while 루프에 들어가기 전에 해당 사건을 합치는 일에 빠져 버렸습니다. 따, 친구! –

답변

2

 l.remove(Character.valueOf(ch)); 
     l.remove(Character.valueOf(Character.toLowerCase(ch))); 

내 생각은 List.remove(int)가 INT는 목록에서 인덱스 코드에 사용되는 것입니다보십시오.

stacktrace는 예외가 발생하는 올바른 행 번호를 제공합니다. 항상 확인하십시오.

0

또한 대문자 또는 소문자로 2 문자열을 변환하여 시도하고 다음 두 번째 문자열의 각 문자의 인덱스를 가져 와서가 -1 나오지 않는 경우, 다음이

 String s1 = "lennon"; 
     String s2 = "Ln"; 

     s1 = s1.toLowerCase(); 
     s2 = s2.toLowerCase(); 
     List<Character> l = new ArrayList<>(); 
     for (int i = 0; i < s1.length(); i++) { 
      l.add(s1.charAt(i)); 
     } 
     char ch; 
     for (int i = 0; i < s2.length(); i++) { 
      ch = s2.charAt(i); 

      while ((l.indexOf(ch)) != -1) { 
       l.remove(l.indexOf(ch)); 
      } 
     } 
     for (Character c : l) { 
      System.out.printf("%c", c); 
     } 
0

제거 할 수 있습니다 프로그램을 작동시키는 데 필요한 몇 가지 변경 사항입니다. 어쨌든, 아래의 코드를 시도 :

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.format("Enter 2 Strings, schmuck:%n"); 
     String s1=br.readLine(); 
     String s2=br.readLine(); 
     List<Character> l = new ArrayList<Character>(); 
     for(int i=0;i<s1.length();i++) 
     { 
      l.add(s1.charAt(i)); 
     } 
     char ch; 
     for(int i=0;i<s2.length();i++) 
     { 
      ch=s2.charAt(i); 

      while((l.indexOf(ch))!=-1 || (l.indexOf(Character.toLowerCase(ch)))!=-1) 
      { 
       if(Character.isUpperCase(ch)) 
       l.remove(new Character(Character.toLowerCase(ch))); 
       l.remove(new Character(ch)); 
      } 
     } 
     for(Character c : l) 
      { 
      System.out.printf("%c", c); 
      } 
    } 
관련 문제