我正在开发一个Java程序,用于查找嵌入在单词列表文件中的回文列表。我正在介绍Java类,所以我将非常感谢任何形式的帮助或指导!
这是我到目前为止的代码:
import java.util.Scanner;
import java.io.File;
class Palindromes {
public static void main(String[] args) throws Exception {
String pathname = "/users/abrick/resources/american-english-insane";
File dictionary = new File(pathname);
Scanner reader = new Scanner(dictionary);
while (reader.hasNext()) {
String word = reader.nextLine();
for (int i = 0; i > word.length(); i++) {
if (word.charAt(word.indexOf(i) == word.charAt(word.indexOf(i)) - 1) {
System.out.println(word);
}
}
}
}
}
我导入的列表中有3个字母,长度为7个字母或更长。
答案 0 :(得分:0)
由于这是作业,我不会为你提供代码。
当我编码时,我做的第一件事就是后退一步并问自己,
“我想让计算机做什么我会自己做什么?”
好的,所以你有这个huuuuge字符串。可能是这样的:“lkasjdfkajsdf adda aksdjfkasdjf ghhg kajsdfkajsdf oopoo”
等。
字符串的长度可以是奇数也可以是偶数。所以,首先,检查一下。
奇数/偶数将用于计算要读入的字母数。
如果单词是奇数,则读入((length-1)/ 2)个字符。
如果是偶数(长度/ 2)字符。
然后,将这些字符与最后一个字符进行比较。请注意,您需要跳过奇数加长字符串的中间字符。 而不是上面的内容,它检查第1和第2,然后是第2和第3,然后是第3和第4个字符,请检查正面和背面,如此。
while (reader.hasNext()) {
String word = reader.nextLine();
boolean checker = true;
for (int i = 0; i < word.length(); i++) {
if(word.length()<2){return;}
if (word.charAt(i) != word.charAt(word.length()-i) {
checker = false;
}
}
if(checker == true)
{System.out.println(word);}
}
答案 1 :(得分:0)
我假设你正在阅读字符串。使用string.toCharArray()
将每个字符串转换为char []。使用for循环遍历字符数组,如下所示:在迭代1中,如果第一个字符等于最后一个字符,则继续下一次迭代,否则返回false。在迭代2中,如果第二个字符等于倒数第二个字符,则继续下一个迭代,否则返回false。依此类推,直到你到达字符串的中间位置,此时你才会返回true。小心一个一个错误;一些字符串将具有偶数长度,一些字符串将具有奇数长度。
如果你的回文检查器不区分大小写,那么使用string.toLowerCase().toCharArray()
预处理字符数组。
您可以在for循环中使用string.charAt(i)
代替string.toCharArray()
;在这种情况下,如果回文检查器不区分大小写,则使用string = string.toLowerCase()
预处理字符串
答案 2 :(得分:0)
让我们解决问题:最后,你要检查单词的反面是否等于单词。我将假设您将所有单词存储在名为wordArray[]
的数组中。
我有一些代码用于获取单词的反转(从here复制):
public String reverse(String str) {
if ((null == str) || (str.length() <= 1)) {
return str;
}
return new StringBuffer(str).reverse().toString();
}
所以,现在我们只需要在每个单词上调用它。所以:
for(int count = 0; count<wordArray.length;count++) {
String currentWord = wordArray[count];
if(currentWord.equals(reverse(currentWord)) {
//it's a palendrome, do something
}
}
答案 3 :(得分:0)
您有几种方法可以解决此问题。
如果出现以下情况,则将其视为回文:
最终,你的方法并没有做太多的事情。事实上,你根本没有进行任何验证 - 如果第一个和最后一个字符匹配,你只打印这个单词。
这是一个提议:让我们读取字符串的每一端,看看它是否是回文。我们必须考虑它可能是空的,或者长度为1的情况。我们还想摆脱字符串中的任何空格,因为这可能导致验证错误 - 我们使用replaceAll("\\s", "")
解决这个问题。
public boolean isPalindrome(String theString) {
if(theString.length() == 0) {
throw new IllegalStateException("I wouldn't expect a word to be zero-length");
}
if(theString.length() == 1) {
return true;
} else {
char[] wordArr = theString.replaceAll("\\s", "").toLowerCase().toCharArray();
for(int i = 0, j = wordArr.length - 1; i < wordArr.length / 2; i++, j--) {
if(wordArr[i] != wordArr[j]) {
return false;
}
}
return true;
}
}