0

0

Java 实现句子级 Pig Latin 翻译的完整教程

心靈之曲

心靈之曲

发布时间:2026-02-16 09:12:09

|

943人浏览过

|

来源于php中文网

原创

Java 实现句子级 Pig Latin 翻译的完整教程

本文详解如何将单词级 pig latin 转换程序升级为支持整句翻译:通过正确拆分单词、逐词处理并拼接结果,避免在循环中过早 return,并修复字符串数组误用 tostring() 的常见错误。

本文详解如何将单词级 pig latin 转换程序升级为支持整句翻译:通过正确拆分单词、逐词处理并拼接结果,避免在循环中过早 return,并修复字符串数组误用 tostring() 的常见错误。

要让 Pig Latin 程序从“仅处理一个单词”升级为“准确翻译整句”,关键在于重构 pigLatin() 方法的逻辑结构:不能在遍历单词的循环内使用 return——否则函数会在处理第一个词后立即终止,后续单词被完全忽略。同时,原始代码中对 words.toString() 的调用会导致输出类似 [Ljava.lang.String;@7a79be86 的无意义哈希值,而非预期的空格分隔文本。

以下是优化后的完整实现(已整合输入提示、动画效果与健壮性处理):

import java.util.Scanner;

class Main {
  static Scanner myObj = new Scanner(System.in);

  static boolean isVowel(char c) {
    return c == 'A' || c == 'a' || c == 'E' || c == 'e' ||
           c == 'I' || c == 'i' || c == 'O' || c == 'o' ||
           c == 'U' || c == 'u';
  }

  static String pigLatin(String dummy) { // 参数 dummy 已弃用,保留签名兼容性
    System.out.println("
");
    System.out.println("What sentence should I translate?");
    String input = myObj.nextLine().trim();
    System.out.println("");

    // 模拟翻译加载动画(可选)
    try {
      Thread.sleep(800);
      System.out.print(".");
      Thread.sleep(500);
      System.out.print(".");
      Thread.sleep(500);
      System.out.print(".");
      Thread.sleep(500);
      System.out.print("

");
      Thread.sleep(500);
    } catch (InterruptedException e) {
      System.out.println("Animation interrupted: " + e.getMessage());
    }

    // 处理空输入
    if (input.isEmpty()) {
      return "";
    }

    String[] words = input.split("\s+"); // 使用 \s+ 健壮分割(支持多个空格、制表符等)
    String[] pigLatinWords = new String[words.length];

    for (int i = 0; i < words.length; i++) {
      String word = words[i];
      if (word.isEmpty()) {
        pigLatinWords[i] = "";
        continue;
      }

      int len = word.length();
      int index = -1;
      for (int j = 0; j < len; j++) {
        if (isVowel(word.charAt(j))) {
          index = j;
          break;
        }
      }

      if (index == -1) {
        // 无元音词:保持原样(如 "myth", "rhythm")
        pigLatinWords[i] = word;
      } else {
        // 标准 Pig Latin 规则:首元音前部分移至末尾 + "ay"
        pigLatinWords[i] = word.substring(index) + word.substring(0, index) + "ay";
      }
    }

    return String.join(" ", pigLatinWords); // Java 8+ 推荐方式
  }

  public static void main(String[] args) {
    String result = pigLatin("placeholder");
    if (result.isEmpty()) {
      System.out.print("Your sentence in Pig Latin is: <empty>");
    } else {
      System.out.print("Your sentence in Pig Latin is: " + result + "");
    }
  }
}

核心改进点说明:

文赋Ai论文
文赋Ai论文

专业/高质量智能论文AI生成器-在线快速生成论文初稿

下载
  • 循环内禁止 return:所有单词处理统一在 for 循环中完成,结果暂存于 pigLatinWords 数组,最终统一 return String.join(" ", ...)。
  • 健壮分词:使用 split("\s+") 替代 split(" "),可正确处理连续空格、首尾空格及制表符。
  • 空输入防护:添加 trim() 和 isEmpty() 判断,避免异常或无效输出。
  • 无元音词处理:当单词不含元音(如 "myth")时,直接保留原词而非返回 "-1"——更符合实际语言场景。
  • 避免 toString() 陷阱:String[] 的 toString() 不返回内容,必须用 String.join() 或手动拼接。

⚠️ 注意事项:

立即学习Java免费学习笔记(深入)”;

  • 若需兼容 Java 7 或更低版本,请替换 String.join(" ", pigLatinWords) 为:
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < pigLatinWords.length; i++) {
      if (i > 0) sb.append(" ");
      sb.append(pigLatinWords[i]);
    }
    return sb.toString();
  • 当前实现未处理标点符号(如 "Hello!" → "elloHay!" 会丢失 !)。进阶需求可结合正则提取词干与标点分别处理。
  • ANSI 颜色码  在部分 IDE 终端中可能不生效;生产环境建议改用日志库或 UI 框架控制样式。

通过以上重构,你的程序即可稳定支持多词句子翻译,例如输入 "Hello world" 将输出 "elloHay orldway",真正实现从单点功能到实用工具的跨越。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

750

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

551

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1552

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

640

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

905

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

876

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

185

2025.07.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.6万人学习

C# 教程
C# 教程

共94课时 | 9.5万人学习

Java 教程
Java 教程

共578课时 | 66.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号