由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - java初学者求指点这段code
相关主题
std::map 为什么没有排序呢如何用hadoop 析取各种数据?
java里 不用charAt 直接用[] 可以么?How to send a structure containing a pointer over socket?
Re: 问个google面试题 (转载)通过日志分析yarn app实际内存用量
Anybody help me on these questions?Go’s path to becoming a Top 10 if not Top 5 language
Array in Cjava question
hadoop java 里面的SomeClass.class 是什么意思?Java好用在什么地方呢
wiki上关于map的这段程序为什么不work?re一问
C ++ 问题请教一个变态的regular expression 替换
相关话题的讨论汇总
话题: wordcount话题: wordarray话题: char话题: cur
进入Programming版参与讨论
1 (共1页)
c*w
发帖数: 2
1
初学java和编程,想请大家指点指点下边这段code有什么办法可以写得更好?
这个方法输入是一个word (String),然后想找到word里有几个音节,规则如下:
1.a,o,u,e,i,y都算元音
2.如果两个或以上元音连续,则只算一个音节
3.如果e是词的最后一个字母,而此外这个词没有别的音节,那这个e不算音节
4.不能用regex,得用loop
int numSyllables(String word)
{
char[] wordarray = word.toCharArray();
int wordcount = 0;
char prev = 0;
for (int i = 0; i < wordarray.length; i++) {
char cur = wordarray[i];
if (i > 0) prev = wordarray[i-1];
if (cur!='e' || i!=wordarray.length-1) {
if ("aoeuiyAOEUIY".contains(""+cur)) {
if (!"aoeuiyAOEUIY".contains(""+prev
)) {
wordcount++;
}
}
} else if (wordcount == 0) {
wordcount++;
}
}
return wordcount;
}
w**z
发帖数: 8232
2
把所有元音放在一个 hashset 里,做check会高效一点。

【在 c*w 的大作中提到】
: 初学java和编程,想请大家指点指点下边这段code有什么办法可以写得更好?
: 这个方法输入是一个word (String),然后想找到word里有几个音节,规则如下:
: 1.a,o,u,e,i,y都算元音
: 2.如果两个或以上元音连续,则只算一个音节
: 3.如果e是词的最后一个字母,而此外这个词没有别的音节,那这个e不算音节
: 4.不能用regex,得用loop
: int numSyllables(String word)
: {
: char[] wordarray = word.toCharArray();
: int wordcount = 0;

s***o
发帖数: 2191
3
只用loop大概也就这样了。按我的习惯改一下的话
// not verified
char[] wordarray = word.toCharArray();
int wordcount = 0;
boolean isPreviousVowel = false;

for (int i = 0; i < wordarray.length; i++) {
char cur = wordarray[i];
if (cur == 'e' && i == wordarray.length - 1 && !isPreviousVowel)
{
return wordcount == 0? 0 : wordcount +1;
}
if ("aoeuiyAOEUIY".contains("" + cur)) {
if (!isPreviousVowel) {
wordcount++;
}
isPreviousVowel = true;
} else {
isPreviousVowel = false;
}
}
return wordcount;
c*w
发帖数: 2
4
谢谢你还有楼上wwzz。
对的,我也觉得弄个prev跟踪前一个char有点sloppy,用个flag是清楚多了,多谢指点。

【在 s***o 的大作中提到】
: 只用loop大概也就这样了。按我的习惯改一下的话
: // not verified
: char[] wordarray = word.toCharArray();
: int wordcount = 0;
: boolean isPreviousVowel = false;
:
: for (int i = 0; i < wordarray.length; i++) {
: char cur = wordarray[i];
: if (cur == 'e' && i == wordarray.length - 1 && !isPreviousVowel)
: {

s***o
发帖数: 2191
5
修改了一下。还是没忍住写了个test case,结果发现条件3有问题 :P

点。

【在 c*w 的大作中提到】
: 谢谢你还有楼上wwzz。
: 对的,我也觉得弄个prev跟踪前一个char有点sloppy,用个flag是清楚多了,多谢指点。

s*i
发帖数: 5025
6
如果Word就是 e 一个字母,怎么算?
[发表自未名空间手机版 - m.mitbbs.com]
s*i
发帖数: 5025
7
my 2 cents:
1. use charAt(...) instead;
2. use if-test instead of "aoeuiyAOEUIY".contains(...). For example:
boolean isVowel(char c)
{
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c
== 'y' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c ==
'Y';
}
It is ugly but much more efficient.
if you do want to use "aoeuiyAOEUIY".contains(...), declare "aoeuiyAOEUIY"
as a variable before the loop;

[发表自未名空间手机版 - m.mitbbs.com]

【在 c*w 的大作中提到】
: 初学java和编程,想请大家指点指点下边这段code有什么办法可以写得更好?
: 这个方法输入是一个word (String),然后想找到word里有几个音节,规则如下:
: 1.a,o,u,e,i,y都算元音
: 2.如果两个或以上元音连续,则只算一个音节
: 3.如果e是词的最后一个字母,而此外这个词没有别的音节,那这个e不算音节
: 4.不能用regex,得用loop
: int numSyllables(String word)
: {
: char[] wordarray = word.toCharArray();
: int wordcount = 0;

x*****n
发帖数: 98
8
use String.valueOf(char) instead of "" + char
ET
发帖数: 10701
9
1 把输入变成lowercase, 比较aoeiu简单些。
2. hashset aoeiu

【在 c*w 的大作中提到】
: 初学java和编程,想请大家指点指点下边这段code有什么办法可以写得更好?
: 这个方法输入是一个word (String),然后想找到word里有几个音节,规则如下:
: 1.a,o,u,e,i,y都算元音
: 2.如果两个或以上元音连续,则只算一个音节
: 3.如果e是词的最后一个字母,而此外这个词没有别的音节,那这个e不算音节
: 4.不能用regex,得用loop
: int numSyllables(String word)
: {
: char[] wordarray = word.toCharArray();
: int wordcount = 0;

n*****t
发帖数: 22014
10
其实我更感兴趣的是 regex 怎么写 ^_^

【在 c*w 的大作中提到】
: 初学java和编程,想请大家指点指点下边这段code有什么办法可以写得更好?
: 这个方法输入是一个word (String),然后想找到word里有几个音节,规则如下:
: 1.a,o,u,e,i,y都算元音
: 2.如果两个或以上元音连续,则只算一个音节
: 3.如果e是词的最后一个字母,而此外这个词没有别的音节,那这个e不算音节
: 4.不能用regex,得用loop
: int numSyllables(String word)
: {
: char[] wordarray = word.toCharArray();
: int wordcount = 0;

d***a
发帖数: 13752
11
用switch statement实现一个finite state machine,会比较清晰。正规表达式一般是
这样实现的。

【在 c*w 的大作中提到】
: 初学java和编程,想请大家指点指点下边这段code有什么办法可以写得更好?
: 这个方法输入是一个word (String),然后想找到word里有几个音节,规则如下:
: 1.a,o,u,e,i,y都算元音
: 2.如果两个或以上元音连续,则只算一个音节
: 3.如果e是词的最后一个字母,而此外这个词没有别的音节,那这个e不算音节
: 4.不能用regex,得用loop
: int numSyllables(String word)
: {
: char[] wordarray = word.toCharArray();
: int wordcount = 0;

1 (共1页)
进入Programming版参与讨论
相关主题
请教一个变态的regular expression 替换Array in C
How to implement "reverse a singly linked list" recursivelyhadoop java 里面的SomeClass.class 是什么意思?
any way to use regex in Fortran?wiki上关于map的这段程序为什么不work?
stl 源代码疑问C ++ 问题
std::map 为什么没有排序呢如何用hadoop 析取各种数据?
java里 不用charAt 直接用[] 可以么?How to send a structure containing a pointer over socket?
Re: 问个google面试题 (转载)通过日志分析yarn app实际内存用量
Anybody help me on these questions?Go’s path to becoming a Top 10 if not Top 5 language
相关话题的讨论汇总
话题: wordcount话题: wordarray话题: char话题: cur