●假设单词以辅音字母開始,将词首的辅音字母字符串(第一个元音字母前的全部字母)从单词的开头移动到末尾,然后加上后缀ay,这样就形成了它的pig  latin。

●假设单词以元音字母開始,仅仅须要加入后缀way就可以。

这里注意java中的分离思想,对于这样的问题,我们一眼想不出解决的方法的时候,我们就要把它分解成多个小问题;

对于这个问题:

首先,我们会想推断它的第一个字母是不是元音字母,引申为查找它的第一个元音字母的位置,找到就返回它的位置,在这里还有推断它是否是一个英语单词,假设是而且第一个为元音字母的话,我们就在后面加入后缀返回,假设没有元音字母就直接返回原英语单词,假设元音字母在中间的话就将词首的辅音字母字符串从单词的开头移动到末尾,再加上后缀ay,然后返回。

这里又涉及到了一个字符串的分离问题,假设是一篇文章,一段话的话,肯定不会仅仅有一个单词,所以,我们就要把他们分离成一个单词,然后再进行推断再进行处理。

到这里,我们的问题就分成了5个小问题:

1.找出第一个元音字母的位置;

2.对字母进行推断(看是不是元音字母);

3.推断是不是一个英语单词;

4.转换一段文字(把一段文字分离成一个一个单词);

5.转换一个单词(对单词进行处理,加入后缀)

以下是我的代码(參考了老师的代码)

主方法:

package com.whj.PigLatin;

import java.util.Scanner;
import java.util.StringTokenizer; public class Test { private static String DELIMITERS ="`~!@#$%^&*()<>?:[]{}_-+=?.,';"; //这里设置的是一个常量,用于分离的(仅仅要遇到这些字符,两个单词就会分离;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//从键盘输入
String line=scanner.nextLine();
System.out.println(translateLine(line));
}

转换文字的方法(对一段文字进行分离):

这里用到了分离单词的这个类,在上个实验中也用到了继承与多态   的第二个实验:

private static String translateLine(String line) {
String result=" ";
StringTokenizer tokenizer=new StringTokenizer(line,DELIMITERS,true);//这个分离用到的一个类
while(tokenizer.hasMoreTokens())//推断hasMoreTokens()方法是否有返回值(看有没有下一个匹配的字段)
{
String token=tokenizer.nextToken();//nextToken() 用于返回下一个匹配的字段  
if(isWord(token))
{
token=tramslateWord(token);
}
result +=token;
}
return result;
}

转换一个单词,对单词进行处理,依照题意要求:

private static String tramslateWord(String token) {

		int local=firstvowel(token);
if(local==-1)
return token;
else if(local==0)
return token+"way";
else
{
String head=token.substring(0,local);//这里用到了一个字符串的分离方法(间隔)
String middle=token.substring(local);
return middle+head+"ay";
} }

查找第一个元音字母的位置:

private static int firstvowel(String token) {
for(int i=0;i<token.length();i++)
if(isEnglishvowel(token.charAt(i)))//charat(i)相当于数组 a[i](比喻可能有点不恰当)
return i;
return -1;
}

推断是不是元音字母:

private static boolean isEnglishvowel(char ch) {
switch(Character.toLowerCase(ch)){
case 'a':
case 'e':
case 'i':
case 'u':
case 'o':
return true;
default: return false;
}
}

推断是不是英语单词:

private static boolean isWord(String token) {
for(int i=0;i<token.length();i++)
if(!Character.isLetter(token.charAt(i)))
return false;
return true;
} }

这个题目涉及到了几个比較重要的java中的类比方:StringTokenizer(字符串的分离方法在这个类中),Character(把大写字母变为小写,小写变大写,推断是不是字符),

String(分隔一个字符串),这几个类中都要非常多的字符串处理的方法,有待我们去学习利用,java的学习就是要灵活的运用这些类,熟悉里面的方法;

字符串的处理真的是一个比較重要的模块,事实上我们如今的非常多操作都是基于字符串的操作,并且好像面试中一般也都会涉及字符串的题目,对这个模块还是要好好掌握,这方面的知识还有非常多,自己还要慢慢的积累。

Pig Latin儿童黑话(java)的更多相关文章

  1. Pig latin基础

    pig的两种运行模式,local模式,mapreduce模式 local模式下,pig只能访问本地一台:在mapreduce模式下,pig可以访问一个hadoop集群和hdfs的安装位置.这时,pig ...

  2. 20190118-利用Python实现Pig Latin游戏

    1.利用Python实现Pig Latin字母游戏 “Pig Latin”是一个英语儿童文字改写游戏,整个游戏遵从下述规则:a. 元音字母是‘a’.‘e’.‘i’.‘o’.‘u’.字母‘y’在不是第一 ...

  3. Pig Latin程序设计1

    Pig是一个大规模数据分析平台.Pig的基础结构层包括一个产生MapReduce程序的编译器.在编译器中,大规模并行执行依据存在.Pig的语言包括一个叫Pig Latin的文本语言,此语言有如下特性: ...

  4. LeetCode算法题-Goat Latin Easy(Java实现)

    这是悦乐书的第322次更新,第344篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第192题(顺位题号是824).给出句子S,由空格分隔的单词组成.每个单词仅由小写和大写 ...

  5. 把指定的字符串翻译成 pig latin。

    freecodecamp上的算法题: 把指定的字符串翻译成 pig latin. Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 & ...

  6. FCC-学习笔记 Pig Latin

    FCC-学习笔记  Pig Latin 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecodecamp.cn/;英文版 ...

  7. 用户输入内容转换成Pig Latin形式。

    //(单词的第一个元音字母之前的一道单词后面,以"ay"结尾,英语单词首字母为元音字母或者没有元音字母的以“ay”为后缀.)package toPigLatin; import j ...

  8. Pig Latin

    function translate(str) { //return str; var list = ['a','e','i','o','u']; if(list.indexOf(str[0]) &g ...

  9. Pig Latin JOIN (inner) 与JOIN (outer)的区别

    1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3. ...

随机推荐

  1. Mining 影响数据挖掘结果的 5 方面

    第一个: 数据类型. 对象的不同属性会用不同的数据类型来描述,如  年龄-->int; 生日 -->date;数据挖掘时也要对不同的类型有不同的对待. 第二个: 数据质量. 数据质量直接影 ...

  2. 未能加载文件 %CommonDir%\dte90a.olb。未能找到该文件,因此解决此问题的尝试失败

    分类: 日常应用问题 2012-08-04 10:53 914人阅读 评论(0) 收藏 举报 microsoft2010c vs2010 启动时提示 ------------------------- ...

  3. listview优化

    http://www.2cto.com/kf/201108/99928.html 项目用到ListView,由于要用到ImageView,图片源不是在资源里面的,没法使用资源ID,因此无法直接使用Si ...

  4. SQL顺序列找出断号

    select id from info id-----------123567810111215 (11 行受影响) 方法一: select (select max(id)+1 from Info w ...

  5. poj3673---双重for循环

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 int main ...

  6. iOS 性能测试 - FBMemoryProfiler

    FBMemoryProfiler 是Facebook开源的一款用于分析iOS内存使用和检测循环引用的工具库. 脑补:http://www.cocoachina.com/ios/20160421/159 ...

  7. 解决itunesconnect无法訪问

    今天打开https://itunesconnect.apple.com出现了无法訪问提示,例如以下图, 我起初以为苹果在维护呢,但想想,假设是维护提示页面也应该会友好些.带着疑问,google一搜,看 ...

  8. DrawText的使用

    DrawText函数简介 这个函数的作用非常easy,就是在指定的区域内输出格式化的文本. 函数原型: int DrawText( HDC hDC, LPCTSTR lpString, int nCo ...

  9. Tab Bar Controller和Navigation Controller混合使用详细教程

    在IPHONE上,NAV和TAB混合使用的案例很多.但很多书籍都没详细介绍这个是怎么使用的.我也找了很久才弄清楚怎么做.现在分享给大家. 1.先建立一个Window-based Application ...

  10. Java面试题之Struts优缺点

    优点: 1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现. 2.有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率 3. 页面导航 使系统的脉 ...