繁体   English   中英

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

[英]Java: Remove non alphabet character from a String without regex

有没有办法从没有正则表达式的字符串中删除所有非字母字符? 我正在尝试检查字符串是否是回文

这是我到目前为止尝试过的。

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

但是,如果输入是:

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

应该是真的

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

OOPS。 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();

现在,仅在letters数组中使用第一个nletters位置,因为这些位置将保留输入中的小写字母。 上面显示了一个仅显示剩余字符的示例。

现在编写一个循环,比较letters[0]letters[nletters-1]letters[1]letters[nletters-2]等。 如果所有对都相等,则您有回文。

我会做这样的事情:

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

说明:该方法将检索仅包含AZ和az字符的字符串。 我只是在验证给定char的ascii代码。 请参考ASCII码表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM