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

Java 从字符串中获取字母的第一个实例,java,string,char,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 f

我正在研究这个非常简单的方法,我知道我很快就要完成它了,但我遗漏了一个细节。谢谢你的帮助。多谢各位

/**
  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 "";
    }
/**
获取此字符串中的第一个字母。
@返回第一个字母,如果没有字母,则返回“”。
add1=AD3F add2=EF4G结果=32SFB(但这些只是随机的整数和字符)
*/
公共字符串firstLetter()
{
字符串行=add1+add2+结果;

对于(int i=0;i您的返回类型是
String
,但您只尝试返回单个字符。为什么不让它返回
char
,将
\0
作为“无字符”返回值-或者可能引发异常

您还需要考虑块的结尾—您的
if
语句、您的
else
子句、循环和方法本身。我强烈建议:

  • 在所有情况下都使用大括号,即使块中只有一条语句(根据
    else
    子句
  • 注意缩进。它使这类事情在清晰度上完全不同

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

您还需要考虑块的结尾—您的
if
语句、您的
else
子句、循环和方法本身。我强烈建议:

  • 在所有情况下都使用大括号,即使块中只有一条语句(根据
    else
    子句
  • 注意缩进。它使这类事情在清晰度上完全不同

您需要将
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 "";
    }
}
公共类首字母
{
公共静态void main(字符串[]args)
{
System.out.println(firstLetter());
}
公共静态字符串firstLetter()
{
字符串line=“AD3F”+“EF4G”+“32SFB”;
对于(int i=0;i
当您清楚地格式化代码时,这种问题就更加明显了


根据您的原始设置,我将返回类型保留为
String
,但也请参见Jon Skeet关于将其更改为
char

的评论。您需要将
否则
代码移出循环,以便仅在测试完所有字符后执行:

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 "";
    }
}
公共类首字母
{
公共静态void main(字符串[]args)
{
System.out.println(firstLetter());
}
公共静态字符串firstLetter()
{
字符串line=“AD3F”+“EF4G”+“32SFB”;
对于(int i=0;i
当您清楚地格式化代码时,这种问题就更加明显了


根据您的原始设置,我将返回类型保留为
String
,但也请参见Jon Skeet关于将其更改为
char

的评论。您的逻辑应该如下所示:

    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 "";
charch;
对于(int i=0;i

一旦找到一个字母,它就会被报告并返回。但是如果到达
的末尾(即
循环的
完成),那么显然找不到字母,所以报告并返回一个空字符串。

您的逻辑应该如下所示:

    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 "";
charch;
对于(int i=0;i

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

非常感谢Skeet先生,我做了您建议我做的更改。作为java初学者,我必须练习缩进,更改后我可以看得更清楚。我感谢您的帮助。非常感谢Skeet先生,我做了您建议我做的更改。作为java初学者我必须练习缩进,修改后我能看得更清楚。我感谢你的帮助。非常感谢Corbett先生。非常感谢你的建议。我非常感谢。非常感谢Corbett先生。非常感谢你的建议。非常感谢。非常感谢你的帮助。DNA先生。我还从你的代码中学习了铸造“return Character.toString(ch)”我本来打算分两步来做,但你告诉我如何一步来做。谢谢你。非常感谢你的帮助,DNA先生。我还从你的代码中学习了“return Character.toString(ch)”我本来打算分两步来做,但你告诉我如何一步来做。谢谢。