2012-02-25 128 views
1

我正在研究这个非常简单的方法,我知道我非常接近完成它,但我错过了一个细节。我感谢任何帮助。谢谢。获取字符串中第一个字母的实例

/** 
    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 ""; 
    } 

回答

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的意见。

+0

非常感谢您对DNA先生的帮助。我还从你的代码中学习了铸造“返回Character.toString(ch)”我将分两步做,但你告诉我如何一步完成。谢谢。 – 2012-02-25 21:21:14

4

你的返回类型为String,但你只是想返回一个字符。为什么不把它返回一个char,与\0为“无字”返回值 - 或者可能抛出异常......

您还需要考虑块的两端 - 你if声明,您else条款,循环和方法本身。我会强烈建议:

  • 使用大括号的所有情况,即使有只在该块一个声明(按照else条款
  • 注重压痕这使得清晰度所有的差异。 。为
+1

非常感谢Skeet先生,我提出了你给我的改变。作为java的初学者,我必须练习缩进,在发生变化后我可以更清楚地看到它。我感谢您的帮助。 – 2012-02-25 21:18:13

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循环完成),那么显然没有找到字母,因此请报告并返回空字符串。

+0

非常感谢Corbett先生。非常有用的建议。我很感激。 – 2012-02-25 21:19:55

相关问题