此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


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 ="`~!@#$%^&*()<>?:[]{}_-+=?.,';"; //这里设置的是一个常量,用于分离的(只要遇到这些字符,两个单词就会分离;
	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的学习就是要灵活的运用这些类,熟悉里面的方法;

字符串的处理真的是一个比较重要的模块,其实我们现在的很多操作都是基于字符串的操作,而且好像面试中一般也都会涉及字符串的题目,对这个模块还是要好好掌握,这方面的知识还有很多,自己还要慢慢的积累。

    


本文链接http://element-ui.cn/news/show-577075.aspx