Pig Latin儿童黑话(java)



●假设单词以辅音字母開始,将词首的辅音字母字符串(第一个元音字母前的全部字母)从单词的开头移动到末尾,然后加上后缀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 ="`[email protected]#$%^&*()<>?:[]{}_-+=?.,‘;"; //这里设置的是一个常量,用于分离的(仅仅要遇到这些字符,两个单词就会分离;
	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)

时间: 2024-11-09 16:26:53

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

20190118-利用Python实现Pig Latin游戏

1.利用Python实现Pig Latin字母游戏 "Pig Latin"是一个英语儿童文字改写游戏,整个游戏遵从下述规则:a. 元音字母是'a'.'e'.'i'.'o'.'u'.字母'y'在不是第一个字母的情况下,也被视作元音字母.其他字母均为辅音字母.例如,单词"yearly"有三个元音字母(分别为'e'.'a'和最后一个'y')和三个辅音字母(第一个'y'.'r'和'l'). b. 如果英文单词以元音字母开始,则在单词末尾加入"hay"后得

Pig Latin介绍

背景 当下很多公司都依赖于数据分析来提升产品质量.各种各样的数据库构架(比如并行数据库)正应对了这样的需求,但其缺点是技术人员必须依赖SQL这样远不如其他编程语言方便的语言来处理数据.所以很多人都选择了MapReduce,因为这种模式下只需要设计Map和Reduce两个方程就够了,但是难以重复使用,维护,和优化也是这种模式的缺陷. 在这样的情况下,兼顾两者优点的Pig Latin应运而生. Pig Latin的语言特点 Pig Latin让用户每次只输入一条单独的语句,这条单独的语句只执行一个简

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

freecodecamp上的算法题: Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay". 如果单词以元音开始,你只需要在词尾添加 "way" 就可以了. 代码: function translate(str) { var vowel = ["a", "e", "i", "o", "u"]; i

儿童黑话

题目 在这道题目中,我们需要写一个函数,把传入的字符串翻译成"儿童黑话". 儿童黑话的基本转换规则很简单,只需要把一个英文单词的第一个辅音字母或第一组辅音从移到单词的结尾,并在后面加上ay即可.在英语中,字母 a.e.i.o.u 为元音,其余的字母均为辅音.辅音从的意思是连续的多个辅音字母. 额外地,如果单词本身是以元音开头的,那只需要在结尾加上way. 在本题中,传入的单词一定会是英文单词,且所有字母均为小写 translatePigLatin("eight")应

Pig安装及简单使用(pig版本0.13.0,Hadoop版本2.5.0)

原文地址:http://www.linuxidc.com/Linux/2014-03/99055.htm 我们用MapReduce进行数据分析.当业务比较复杂的时候,使用MapReduce将会是一个很复杂的事情,比如你需要对数据进行很多预处理或转换,以便能够适应MapReduce的处理模式,另一方面,编写MapReduce程序,发布及运行作业都将是一个比较耗时的事情. Pig的出现很好的弥补了这一不足.Pig能够让你专心于数据及业务本身,而不是纠结于数据的格式转换以及MapReduce程序的编写

玩转大数据之Apache Pig如何与Apache Lucene集成

在文章开始之前,我们还是简单来回顾下Pig的的前尘往事: 1,Pig是什么? Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache(一个开源软件的基金组织)的一个项目,由Apache来负责维护,Pig是一个基于 Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算.Pig为复杂的海量数据并行计算提供了一个简 易的操作和编程接口,这一

使用 Apache Pig 处理数据7

Mapreduce 模式中的 Pig 对于 MapReduce 模式,必须首先确保 Hadoop 正在运行.要做到这一点,最简单的方法是在 Hadoop 文件系统树的根上执行文件列表操作,如 清单 3 所示. 清单 3. 测试 Hadoop 可用性 $ hadoop dfs -ls / Found 3 items drwxrwxrwx - hue supergroup 0 2011-12-08 05:20 /tmp drwxr-xr-x - hue supergroup 0 2011-12-08

Pig安装及本地模式实战

Pig是Apache的一个开源项目,用于简化MapReduce的开发,实质Pig将转化为MapReduce作业,使开发人员更多专注数据而不是执行的本质,是不懂java人员的福利. Pig由以下两部分组成: 1.表达数据流的语言,成为Pig Latin. 2.运行Pig Latin程序的执行环境.目前有两种环境:在单个JVM本地执行和在HADOOP集群上分步执行 废话不多说,实战起来: 和Apache其他项目一样,安装Pig都很简单,在/etc/profile文件中设置环境变量. #set pig

pig的安装及使用

1.下载软件: wget http://apache.fayea.com/pig/pig-0.15.0/pig-0.15.0.tar.gz 2.解压 tar -zxvf pig-0.15.0.tar.gz mv pig-0.15.0 /usr/local/ ln -s pig-0.15.0 pig 3.配置环境变量: export PATH=PATH=$HOME/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/pig/bin