2009-10-30 2 views
1

내가 작성한 기본 프로그램에 관해서는 racecar와 같은 단어가 회문인지 아닌지에 대해 질문했습니다.문자열이 문자열인지 여부를 확인 String.equals()

문자열을 뒤집는 나의 모든 방법은 문장 부호를 제거하지만 문장 부호인지 아닌지는 판별하지 않습니다. 뭔가가 회문이

public boolean isPalindrome(String string) 
{ 
    return string.equals(reverseString(string)); 
} 

해야하는 경우

/** 
* Determines if a series of letters makes a palinedrome 
* 
* @param str All punctuation and spaces have been removed 
*    before this method is called. 
* @return true if phrase is a palindrome, 
*   false otherwise. 
*/ 
public boolean isPalindrome(String str) 
{ 
    String d = reverseString (str); 
    return(str.equals (reverseString (str))); 

} 
+21

은 숙제와 같은 냄새가납니다. – jldupont

+0

reverseString은 어디에 정의합니까? – EmFi

+3

그리고 질문은 ...? – sinuhepop

답변

5
string reverseString(String string)하면

, 모든 공백은 회문 정의는 다음 equalsIgnoreCase를 사용하여 케이스에 대해 상관하지 않는다, 그래서 만약이 대소 문자를 구분 부여 확인 후 제거 대신.

그래도 문제가 해결되지 않으면 스트리핑 및 리버스String 메서드를 다시 확인해야 할 수 있습니다.

public boolean isPalindrome (String str) { 
    System.out.println ("DEBUG: original string = '" + str + "'"); 
    System.out.println ("DEBUG: reverse string = '" + reverseString (str) + "'"); 
    if (str.equals (reverseString (str))) 
     System.out.println ("DEBUG: returning true"); 
    else 
     System.out.println ("DEBUG: returning false"); 
    return str.equals (reverseString (str)); 
} 

: 당신이 당신의 기능이 작동하지 않는 이유를 참조 단지 디버그 코드를 추가하려면

+0

그 코드에 뭔가 빠졌습니까? 그것은 불필요한 "String d = ..."행을 제외하고는 질문에있는 것과 정확히 같습니다. 아니면 당신의 다른 점들을 완벽하게하기 위해서입니까? – paxdiablo

+0

완전 함을 위해. 당신이 나 자신을 더 잘 표현할 수 있었던 것은 맞습니다. 이전에 게시 한 코드는 정확해야하며 문제가있는 곳을 다른 곳에서 찾아야합니다. –

+0

좋습니다. 그리고 당신이 잘못이 어디에 있는지 당신이 맞을 거란 데 동의합니다. String.equals()의 사용량을 감안할 때, 숙제를 해결하고 잘못 처리하는 방법을 알려주는 지금은 버그가 없습니다 :-) – paxdiablo

6

좋아, 나는 그것을 사용하지 않을 것 때문에 함수에 제공하기위한 것입니다 무슨 목적으로 d 모르겠지만 나는 당신의 reverseString 기능 (그러나 이 아닌 돈이 아닌)에 문제가 있다는 것에 돈을 걸고 싶습니다. 이 디버그 문은 문제가있는 곳을 파악할 수 있도록 해줍니다.

0

문제점은 표시되지 않은 역방향 문자열 방법입니다. 해당 메서드가 제대로 작동하면 isPalindrome 메서드가 제대로 작동합니다. 역 문자열 방법을 수정하면됩니다.

Java에는 네이티브 리버스 문자열 방법이 없으므로 직접 작성하는 것이 좋습니다.

그러나 Java는 StringBufferStringBuilder에 대해 역순으로 수행됩니다. StringBuilder가 StringBuffer보다 선호됩니다.

+0

-1. StringBuilder가 StringBuffer보다 선호됩니다. –

+0

코드를 작성하지 않았습니다. 방금 문제를 해결할 수있는 방법을 언급했습니다. stringbuilder가 stringbuffer보다 선호된다면 정말 중요합니까? 그것은 단지 간단한 문제 일 뿐이며 실험을해야합니다. –

+0

+1. @JM은 옳다. 그는 숙제로 눈살을 찌푸린 코드를 게시하지 않았습니다. 힌트는 상대적으로 명백하지만 OP를 통해 공정한 작업이 필요합니다. 그리고이 수준의 숙제는 덜 효율적인 방법을 선택하여 용서받을 수 있습니다. (나는 자바를 매일 코딩하고 여전히 전체 라이브러리에 대한 지식이 25 % 이하의 범위에 있다고 생각합니다.) 틀림없이 * reverseString()을 롤링하는 것보다 훨씬 효율적입니다. – paxdiablo

0

코드는 다음과 같이해야합니다 원래 문자열로 반전 문자열을 비교하기 위해 equals 메소드를 사용하여

String d = reverseString (str); 
return(str.equals (d)); 

하는 당신은 reverseString 두 번 호출 할 필요가 없습니다()

PS : StringBuffer에는 String을 뒤집는 메서드가 있습니다.

0

나는 이미 숙제를 제출했음을 확신하지만, 저는 자바를 배우며 연습이 필요합니다. 그래서 여기에 제 코드가 있습니다. char 배열을 사용하고 그것을 역전시킵니다. 나는 최선의 방법은 모두 StringBuilder를 사용하는 것입니다 가정 싶지만, 숙제의 목적은 스스로를 어떻게 배울 아마도 :

public class reverseString { 
    public static void main(String[] args) { 
     System.out.println("racecar is a palindrome: "+ isPalindrome("racecar")); 
    } 

    public static boolean isPalindrome(String str) 
    { 
     String d = reverseString (str); 
     return(str.equals (reverseString (str))); 
    } 

    private static char[] reverse(char[] input) { 
     int length = input.length; 
     char[] reversed = new char[length]; 
     for (int i=0;i<length;i++) { 
      reversed[length-i-1]=input[i]; 
     } 
     return reversed; 
    } 

    private static String reverseString(String input){ 
     String reversed = new String(reverse(input.toCharArray())); 
     return reversed; 
    } 
} 

출력 :

racecar is a palindrome: true 

사람이 의견이있는 경우 내 코드가 왜 짜증나는지, 멀리 떨어져있어. 건설적인 비판에 감사드립니다.

관련 문제