首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在单词列表中查找回文

在单词列表中查找回文
EN

Stack Overflow用户
提问于 2013-04-15 06:51:10
回答 4查看 3.4K关注 0票数 1

我正在为Java开发一个程序,教它如何查找嵌入在单词列表文件中的回文列表。我在一个Java入门课程中,所以任何类型的帮助或指导都将非常感谢!

以下是我到目前为止拥有的代码:

代码语言:javascript
运行
复制
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个字母或更长。

EN

回答 4

Stack Overflow用户

发布于 2013-04-15 06:58:49

因为这是家庭作业,所以我不会给你提供代码。

当我编写代码时,我做的第一件事就是后退一步,问问自己,

“我想让计算机做什么,我自己也会做什么?”

好的,你得到了这个huuuuge字符串。可能是这样的:"lkasjdfkajsdf adda aksdjfkasdjf ghhg kajsdfkajsdf oopoo“

等等。

字符串的长度要么是奇数,要么是偶数。所以,首先,检查一下。

奇数/偶数将用于计算要读入的字母数。

如果单词是奇数,则读入((length-1)/2)个字符。

如果是偶数(长度/2)个字符。

然后,将这些字符与最后一个字符进行比较。请注意,对于奇数长度的字符串,您需要跳过中间字符。而不是像上面那样,先检查第一个和第二个字符,然后检查第二个和第三个字符,然后检查第三个和第四个字符,从前面到后面检查,如下所示。

代码语言:javascript
运行
复制
        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);}
        }
票数 0
EN

Stack Overflow用户

发布于 2013-04-15 06:59:34

我假设你是以字符串的形式读取的。使用string.toCharArray()将每个字符串转换为char[]。使用for循环遍历字符数组,如下所示:在迭代1中,如果第一个字符等于最后一个字符,则继续进行下一次迭代,否则返回false。在迭代2中,如果第二个字符等于倒数第二个字符,则继续进行下一次迭代,否则返回false。依此类推,直到到达字符串的中间,此时返回true。注意off-by-1错误;有些字符串的长度是偶数,有些字符串的长度是奇数。

如果您的回文检查器不区分大小写,则使用string.toLowerCase().toCharArray()预处理字符数组。

可以在for循环中使用string.charAt(i)而不是string.toCharArray();在这种情况下,如果回文检查器不区分大小写,则使用string = string.toLowerCase()预处理字符串

票数 0
EN

Stack Overflow用户

发布于 2013-04-15 07:02:35

让我们将问题分解:最后,您将检查单词的反转是否等于单词。我假设您已经将所有单词存储在一个名为wordArray[]的数组中。

我有一些代码来获得单词的反面(从here复制):

代码语言:javascript
运行
复制
public String reverse(String str) {
  if ((null == str) || (str.length() <= 1)) {
    return str;
  }
  return new StringBuffer(str).reverse().toString();
}

所以,现在我们只需要在每个单词上调用它。所以:

代码语言:javascript
运行
复制
for(int count = 0; count<wordArray.length;count++) {
  String currentWord = wordArray[count];
  if(currentWord.equals(reverse(currentWord)) {
    //it's a palendrome, do something
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16005295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档