[英]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.