我如何删除空格?

时间:2011-10-28 12:28:55

标签: java eclipse string

我正在尝试为我的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();
  }
}

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:1)

似乎你的代码很好,除了以下内容。您正在使用

String string = sc.next();

不会读取整行输入,因此您将丢失部分文本。我认为你应该使用以下代替那一行。

String string = sc.nextLine();

答案 1 :(得分:1)

如果您只想删除开头和结尾的空格,可以使用内置函数trim(),例如: “abcd”.trim()是“abcd” 如果要在任何地方删除它,可以使用带有空格类的replaceAll()方法作为参数,例如“abcd”.replaceAll(“\ W”,“”)。

答案 2 :(得分:0)

使用StringTokenizer删除" "

  StringTokenizer st = new StringTokenizer(string," ",false);
  String t="";
  while (st.hasMoreElements()) t += st.nextElement();
  String result = t;
  System.out.println(result);

答案 3 :(得分:0)

我实际上没有考虑过这个,但你考虑过String.replaceAll(String regex, String replacement)方法吗?

public static String removeJunk (String string) {
    return string.replaceAll (" ", "");
}

答案 4 :(得分:0)

需要注意的另一件事是,删除所有非数字/字母字符removeJunk时也会反转字符串(它从结尾处开始,然后一次附加一个字符)。

因此,在再次反转之后(在reverse中),您将保留原始内容并且它将始终声明给定的字符串是回文。

答案 5 :(得分:0)

您应该使用String replace(char oldChar, char newChar)方法。 虽然名称表明只会替换第一个匹配项,fact is将替换所有匹配项。这种方法的优点是它不会使用正则表达式,因此效率更高。

所以试试string.replace(' ', '');