Boşluğu nasıl kaldırırım?

AP Java sınıfım için bir palindrome test programı oluşturmaya çalışıyorum ve kodumdaki boşlukları tamamen kaldırmam gerekiyor ama bunu yapmama izin vermiyor.

import java.util.Scanner;

public class Palin{

  public static boolean isPalindrome(String stringToTest) {
    String workingCopy = removeJunk(stringToTest);
    String reversedCopy = reverse(workingCopy);

    return reversedCopy.equalsIgnoreCase(workingCopy);
  }

  public static String removeJunk(String string) {
    int i, len = string.length();
    StringBuffer dest = new StringBuffer(len);
    char c;


    for (i = (len - 1); i >= 0; i-=1) {
      c = string.charAt(i);
      if (Character.isLetterOrDigit(c)) 
      {
        dest.append(c);
      }


    }

    return dest.toString();
  }

  public static String reverse(String string) {
    StringBuffer sb = new StringBuffer(string);

    return sb.reverse().toString();
  }

  public static void main(String[] args) {
    System.out.print("Enter Palindrome: ");
    Scanner sc = new Scanner(System.in);
    String string = sc.next();

    String str = string;
    String space = "";
    String result = str.replaceAll("\\W", space);
    System.out.println(result);

    System.out.println();
    System.out.println("Testing palindrome:");
    System.out.println("    " + string);
    System.out.println();

    if (isPalindrome(result)) {
      System.out.println("It's a palindrome!");
    } else {
      System.out.println("Not a palindrome!");
    }
    System.out.println();
  }
}

Herhangi bir yardım büyük takdir edilecektir.

1

6 cevap

Sadece başlangıç ​​ve bitiş boşluklarını kaldırmak istiyorsanız, yerleşik fonksiyon trimini() kullanabilirsiniz, ör. "abcd" .trim() "abcd" dir Bunu her yerde kaldırmak isterseniz, boşluk olarak kullanılan boşluk ile parametre olarak yer alan replaceAll() yöntemini kullanabilirsiniz. "abcd" .replaceAll ("\ W", "").

1
katma

Aşağıdakiler hariç kodunuz iyi görünüyor. Kullanıyorsun

String string = sc.next();

tüm girdi satırını okumayacağınız için metnin bir kısmını kaybedersiniz. Bence şu satırın yerine aşağıdakileri kullanmalısın.

String string = sc.nextLine();
1
katma

String replace (char oldChar, char newChar) yöntemini kullanmalısınız. Ad, yalnızca ilk oluşumun değiştirileceğini düşündürse de gerçek ise, tüm oluşumların yerini alacak. Bu yöntemin avantajı, düzenli ifadeler kullanmaması, dolayısıyla daha verimli olmasıdır.

So give a try to string.replace(' ', '');

0
katma

Use a StringTokenizer to remove " "

  StringTokenizer st = new StringTokenizer(string," ",false);
  String t="";
  while (st.hasMoreElements()) t += st.nextElement();
  String result = t;
  System.out.println(result);
0
katma
Bu replaceAll bloğunuzun yerini almalıdır
katma yazar Jean-Charles, kaynak
Ancak, replaceAll ("\\ W", "") ve replaceAll ("\\ s +", "") ile de çalışmalıdır.
katma yazar Jean-Charles, kaynak
java.util.StringTokenizer 'ı içe aktarın. Hangi java sürümünü kullanıyorsunuz?
katma yazar Jean-Charles, kaynak
Nerede koyayım?
katma yazar Kentaro51, kaynak
Eclipse StringTokenizer kodunu tanımıyor
katma yazar Kentaro51, kaynak
0
katma
Denedim ama işe yaramıyor
katma yazar Kentaro51, kaynak

Dikkat edilmesi gereken diğer bir şey ise, tüm non-digit/alpha karakterlerini kaldırırken removeJunk da dizgeyi tersine çevirir (sondan başlar ve her seferinde bir karakter ekler).

Bu yüzden tekrar tersine çevirdikten sonra ( tersine ), orijinal ile birlikte kalırsınız ve her zaman verilen dizenin bir palindrom olduğunu iddia eder.

0
katma
Ah, nevermind - reversedCopy ile workingCopy ile stringToTest arasında bir karşılaştırma yaptığınızı fark ettiniz.
katma yazar user1018337, kaynak