Java:从没有正则表达式的字符串中删除非字母字符

Java:从没有正则表达式的字符串中删除非字母字符,java,Java,有没有办法在没有正则表达式的情况下从字符串中删除所有非字母字符? 我正在检查字符串是否为 这就是我到目前为止所尝试的 public static boolean isPalindrome( String text ) { int textLength = text.length() - 1; String reformattedText = text.trim().toLowerCase(); for( int i = 0; i &

有没有办法在没有正则表达式的情况下从字符串中删除所有非字母字符? 我正在检查字符串是否为

这就是我到目前为止所尝试的

    public static boolean isPalindrome( String text )
    {
        int textLength = text.length() - 1;
        String reformattedText = text.trim().toLowerCase();
        for( int i = 0; i <= textLength; i++ )
        {
            if( reformattedText.charAt( i ) != reformattedText.charAt( textLength - i ) )
            {
                return false;
            }
        }

        return true;
    }
这应该是真的

我真的很难思考如何删除或忽略字符串上的非字母字符

String removeNonAlpha(最后一个字符串字){
String removeNonAlpha(final String word) {
    final StringBuilder result = new StringBuilder();

    for (final char ch : word.toCharArray()) {
        final int ascii = ch;
        if (((ascii >= 65) && (ascii <= 90)) || ((ascii >= 97) && (ascii <= 122))) {
            result.append(ch);
        }
    }
    return result.toString();
}
最终StringBuilder结果=新建StringBuilder(); for(最终字符ch:word.toCharArray()){ 最终int ascii=ch;
如果((ascii>=65)&&&(ascii=97)&&(asciiOOPS.Java,而不是Python)

您仍然可以在Java中使用类似列表的访问,只需做更多的工作

char[] letters = text.toCharArray(); 
int nletters = 0;
for (int i=0; i<letters.length; ++i) {
    if (Character.isLetter(letters[i])
        letters[nletters++] = Character.toUpperCase(letters[i]);
}
// print out letters in array:
System.out.print("letters only: ");
for (int i=0; i<nletters; ++i) {
    System.out.print(letters[i]);
}
System.out.println();
char[]字母=text.tocharray();
int nletters=0;

对于(int i=0;i我会这样做:

public static String justAlphaChars(String text) {

    StringBuilder builder = new StringBuilder();

    for (char ch : text.toCharArray()) 
        if (Character.isAlphabetic(ch)) 
            builder.append(ch);

    return builder.toString();
}
刚刚在下面的示例中测试了上面的方法,并且有效。返回true

System.out.println( isPalindrome( justAlphaChars ( "Are we not pure? No sir! Panama’s moody"
        + "Noriega brags. It is garbage! Irony dooms a man; a prisoner up to new era." ) ) );

逐字符检查并使用此选项a)正则表达式有什么问题?b)你可以有两个索引,一个从开头开始,一个从结尾开始,让它跳过你不想要的字符。@Thilo a.)我在问有没有办法。b.)我现在正试图实现这一点,但也遇到了困难。只需使用堆栈和队列。迭代字符串,并将每个字符放在堆栈和队列上。记住忽略任何非字母顺序的内容。最后获取字符,并比较它们:)@EvdzhanMustafa我在跟踪你吗?1个循环用于迭代string要放在堆栈和队列上,然后再放一个循环来获取它并比较它们?顺便说一句:我只是在回答关于不使用正则表达式删除非字母字符的问题…我不是在检查它是否是回文。:)顺便问一句,为什么要使用
StringBuilder
而不是
String
?这有什么原因吗?Strings are final,这意味着每当您附加某个内容(字符串+另一个)时,就会创建该字符串的新实例。因为我们正在循环中向结果字符串添加有效字符,所以请使用StringBuilder。值得注意的是,这只适用于非重音字符。如果您在
“aħ–a”上测试输出
即使中间的两个字母是a-z,它也会剪掉,因此会被检测为回文。没错!我现在在火车上,稍后会更新代码,谢谢安迪!我对这部分感到困惑现在只在字母数组中使用第一个nletters位置,因为这些位置将保存输入中的小写字母。“@newbie没有创建新数组,我只是根据需要将字母向左移动。nletters变量在每次移动后都会递增,因此它会计算看到的字母数。这些字母将在字母[]数组中的位置0到(nletters-1)。我将添加一个示例。
System.out.println( isPalindrome( justAlphaChars ( "Are we not pure? No sir! Panama’s moody"
        + "Noriega brags. It is garbage! Irony dooms a man; a prisoner up to new era." ) ) );