java一个字符串,获取最长的一个单词,单词由数字和字母组成.如果有多个相同长度的单词返回第一个单词,

帮忙看下下面这段程序哪里错了?功能实现不了
package test;
/**
* 一个字符串,获取最长的一个单词,单词由数字和字母组成。
* 如果有多个相同长度的单词返回第一个单词,如输入:“no pains1,no gains1”则返回pains1
*/
public class Test5
{
public String getWord(String str)
{
if(str == null || str == "")
{
return "";
}

StringBuilder sb =new StringBuilder();
String result = "";

for(int i =0;i<str.length();i++)
{
char c = str.charAt(i);
if((c>='0' && c<='9') || (c>='a' && c<='z') ||(c>='A' && c<='Z'))
{
sb.append(c);
}
else
{
if(sb.length() > result.length())
{
result = sb.toString();
sb.delete(0,sb.length());
}
}
}

return result;
}
public static void main(String[] args){
Test5 t=new Test5();
System.out.println(t.getWord("no pains1,no gains1"));
}
}

for(int i=0; i < str.length(); i++) {
char c=str.charAt(i);
if((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
sb.append(c);
} else {
if(sb.length() > result.length()) {
result=sb.toString();
}
sb.delete(0, sb.length());//首先这里先提出来
}
if(i==str.length()-1){//其次当你的i是是字符串最后一个字符时,要多加一个判断,或者在字符串最后加空格之类,不然最后一个单词是不会与result比较的
if(sb.length() > result.length()) {
result=sb.toString();
}
}
}
其实我建议你用正则表达式来判断单词
public String getWord(String str) {
if(str == null || str == "") {
return "";
}
String result="";
Pattern pattern=Pattern.compile("\\b(\\w+)\\b");
try {
Matcher numMacher=pattern.matcher(str);
while(numMacher.find()) {
if(numMacher.group().length() > result.length()) {
result=numMacher.group();
}
}
} catch(Exception e) {
e.printStackTrace();
}

return result;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-10
为啥不用str.split(","); 先把字符串截断呢,然后再求长度,可以放在Map 里面 长度作为key, 字符串内容作为value ,如果只存第一个,那就做个判断条件,然后循环显示出map,问题解决。
第2个回答  2013-12-10
package baiduzhidao;
/**
* 一个字符串,获取最长的一个单词,单词由数字和字母组成
* 如果有多个相同长度的单词返回第一个单词,如输入:“no pains1,no gains1”则返回pains1
*/
public class strlength{
public String getWord(String str) {
if(str == null || str == ""){
return "";
}
StringBuilder sb =new StringBuilder();
String result = "";
for(int i =0;i<str.length();i++) {
char c = str.charAt(i);
if((c>='0' && c<='9') || (c>='a' && c<='z') ||(c>='A' && c<='Z')) {
sb.append(c);
}else{
if(sb.length() > result.length()) {
result = sb.toString();
sb.delete(0,sb.length());
}else {
//加上这个
sb.delete(0,sb.length());
}
}
//加上这个
if(i==str.length()-1){
if(sb.length() > result.length()) {
result = sb.toString();
sb.delete(0,sb.length());
}
}
}
return result;
}

public static void main(String[] args){
strlength t=new strlength();
System.out.println(t.getWord("no pains1,no gains12"));
}
}
第3个回答  2013-12-10
有什么问题呢?结果正确的啊?
相似回答