Як видалити пробіл?

Я намагаюся створити програму тестування паліндром для мого класу AP Java, і мені треба повністю видалити білі поля в моєму коді, але це не дозволяє мені це зробити.

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();
  }
}

Будь-яка допомога буде вдячна.

1

6 Відповіді

Якщо ви просто хочете видалити початок і закінчення пробілу, ви можете використовувати вбудовану функцію trim (), наприклад "abcd" .trim() - "abcd" Якщо ви хочете видалити його скрізь, ви можете використовувати метод replaceAll() класом пробілів як параметр, наприклад. "abcd". замінити всі ("\ W", "").

1
додано

Схоже, ваш код добре, крім наступних. Ви використовуєте

String string = sc.next();

який не буде читати всю лінію введення, отже, ви втратите частину тексту. Я думаю, ви повинні використовувати наступний замість цієї лінії.

String string = sc.nextLine();
1
додано

Ви повинні використовувати метод String replace (char oldChar, char newChar) . Хоча назва вказує на те, що буде замінено лише першу подію, Фактично , що всі події будуть замінені. Перевага цього методу полягає в тому, що вона не використовуватиме регулярних виразів, тому вона є більш ефективною.

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

0
додано

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
додано
Це має замінити ваш блок replaceAll
додано Автор Jean-Charles, джерело
Але слід також працювати з replaceAll ("\\ W", "") і replaceAll ("\\ s +", "")
додано Автор Jean-Charles, джерело
Імпортувати java.util.StringTokenizer . Яку версію яки ви використовуєте?
додано Автор Jean-Charles, джерело
де б я це поставив?
додано Автор Kentaro51, джерело
Eclipse не визнає код StringTokenizer
додано Автор Kentaro51, джерело

Я насправді це не стверджував, але ви вважаєте, що String.replaceAll (рядок регулярних виразів, заміна рядка) метод?

public static String removeJunk (String string) {
    return string.replaceAll (" ", "");
}
0
додано
Спробував, але це не працює
додано Автор Kentaro51, джерело

Інша річ, яку потрібно звернути увагу, полягає в тому, що при видаленні всіх символів без цифр/альфа removeJunk також змінюється рядок (починається з кінця, а потім додається один символ одночасно).

Тому, повернувши його назад (у reverse ), ви залишите оригінал, і він завжди стверджуватиме, що дана рядок є паліндром.

0
додано
Ах, недарма - просто помітили, що ви порівняєте reversedCopy з workingCopy , а не stringToTest .
додано Автор user1018337, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників