从字符串中获取第一个字母实例

时间:2012-02-25 20:50:33

标签: java string char

我正在研究这个非常简单的方法我知道我非常接近完成它,但我错过了一个细节。我感谢任何帮助。谢谢。

/**
  Gets the first letter in this string.
  @return the FIRST LETTER, or "" if there are no letters.
  add1=AD3F add2=EF4G result=32SFB  (BUT THESE ARE RANDOM ONLY INTS AND CHARS)
*/
public String firstLetter()
{
    String line = add1+add2+result;

    for(int i=0; i<line.length(); i++){
    char ch=new Character(line.charAt(i));
    if(Character.isLetter(ch)){
        System.out.println("This is the first letter"+ch);
        return ch;
    }
    else
        System.out.println("No it is not a character: "+ch);
    return "";
    }

3 个答案:

答案 0 :(得分:4)

您的返回类型为String,但您只是尝试返回单个字符。为什么不让它返回char\0作为“无字符”返回值 - 或者可能抛出异常......

您还需要考虑块的结尾 - 您的if语句,您的else子句,循环和方法本身。我会强烈推荐:

  • 对所有情况使用大括号,即使块中只有一个语句(根据else子句
  • 注意缩进。这种事情的清晰度完全不同。

答案 1 :(得分:1)

您需要将else代码移到循环外部,以便仅在测试完所有字符后执行:

public class FirstLetter
{
    public static void main(String[] args)
    {
        System.out.println(firstLetter());
    }

    public static String firstLetter()
    {
        String line = "AD3F" + "EF4G" + "32SFB";

        for (int i = 0; i < line.length(); i++)
        {
            char ch = line.charAt(i);
            if (Character.isLetter(ch))
            {
                System.out.println("This is the first letter: " + ch);
                return Character.toString(ch);
            }

        }
        System.out.println("No character found");
        return "";
    }
}

当您清楚地格式化代码时,这种问题会更加明显。

我已根据您的原始版本将返回类型保留为String,但另请参阅Jon Skeet关于将其更改为char的评论。

答案 2 :(得分:1)

你的逻辑应该是这样的:

    char ch;
    for (int i = 0; i < line.length(); i++) {
        ch = new Character(line.charAt(i));
        if (Character.isLetter(ch)) {
            System.out.println("This is the first letter" + ch);
            return String.valueOf(ch);
        }
    }
    System.out.println("No letters, sorry.")
    return "";

一旦找到信件,就会报告并返回。但是如果到达line结束的末尾(即for循环完成),那么显然没有找到任何字母,所以报告并返回一个空字符串。