【问题标题】:Which methods of the String class to use to get string after a white space?String 类的哪些方法用于在空格后获取字符串?
【发布时间】:2014-10-04 17:43:45
【问题描述】:

几周前我开始了 Java 课程,今天我们收到了一张明天在课堂上做的试卷。今晚我想亲自试一试,但可惜我被困在问题 1 上。

我们今天介绍了String 类的方法,但我不知道应该使用哪一个。

所以最后问题来了:

问。编写并测试一个程序,该程序将提示用户输入他们的姓名并仅将姓氏写入屏幕。 (姓氏被解释为第一个空格之后的所有内容)

这是我目前所拥有的:

import java.util.Scanner;

public class Question1 {

    public static void main(String[] args) {

        String fullName;
        String surname;
        Scanner keyboard = new Scanner(System.in);

        System.out.println("Please enter your name: ");
        fullName = keyboard.nextLine();

        if(fullName.contains(" ")) {
            // not sure what goes in here?
        }

    }

}

我一直在搞乱上面的 if 语句以及 String 类的各种方法,如 subString()charAt() 等,但我不知道如何找到第一个空格,然后在之后打印出 String第一个空格。

【问题讨论】:

  • String#substring 将在这里工作。另外,请使用String#indexOf(' ')。是的,您可以在同一行中使用同一类的多个方法。
  • 查看 API (docs.oracle.com/javase/7/docs/api/java/lang/String.html),它有一个很好的例子来说明如何对某些东西进行子串化(并且给出了来自 @Eran 的示例,您可以找到开始子串的索引)
  • +1 表示格式正确的第一个问题!
  • 感谢您的快速回复和帮助。是的,这样做是有道理的,我现在会搞砸它并希望让它运行:-)

标签: java string methods


【解决方案1】:

您可以通过使用 String 类的 indexOf() 和 subString() 方法来做到这一点:例如,

    public String substringAfter(String str) {
        int pos = str.indexOf(" ");
        if (pos == -1) {
            return "";
        }
        return str.substring(pos + 1);
    }

【讨论】:

    【解决方案2】:

    您可以使用 cmets 中的内容,但也可以使用 split 方法。它有两个参数(或者一个,第二个是可选的):分隔符字符串和限制。它返回拆分字符串的字符串数组。示例:

    String[] splitted = fullName.split(" ", 2);
    

    现在 splitted[0] 是名字(第一个空格之前的部分),splitted[1] 是其余的。

    更多信息在这里:http://docs.oracle.com/javase/8/docs/api/java/lang/String.html

    一般而言,您可以在 Java API 文档中找到很多内容。

    更新

    1) 我弄错了限制,应该是 2 而不是 1

    为了澄清,这里是测试:

    public class Test
    {
        public static void main(String[] args)
        {
            String fullName = "Luiggi SecondName ThirdName NotMyLastNameYet StillNotMyLastNameCuzImaTroll";
            String surname;
    
            String[] splitted = fullName.split(" ", 2);
            surname = splitted[1];
    
            System.out.println(splitted[1]);
        }
    }
    

    输出:

    SecondName ThirdName NotMyLastNameYet StillNotMyLastNameCuzImaTroll
    

    【讨论】:

    • 我不建议使用String#split,因为这意味着要为更复杂的场景解释正则表达式。另外,如果用户输入 Luiggi SecondName ThirdName NotMyLastNameYet StillNotMyLastNameCuzImaTroll 会发生什么?
    • @Luiggi Mendoza:他说姓是第一个空格之后的一切
    • @LuiggiMendoza 是的 OP 声明 (Where the surname is interpreted as everything after the first white space) 并且根据该答案确实有意义。我不认为这与给出的要求有误。是的,我同意regex 部分。
    • 再次。用户输入:Luiggi SecondName ThirdName NotMyLastNameYet StillNotMyLastNameCuzImaTroll。您当前的代码:System.out.println(splitted[1]); 输出:SecondName。预期输出:SecondName ThirdName NotMyLastNameYet StillNotMyLastNameCuzImaTroll。你的答案是错误
    • 不,它没有。自己试试吧。
    【解决方案3】:

    这对你有用还是你想要String方法?

    public static void main(String[] args) {
    
            String fullName;
            String surname;
            Scanner keyboard = new Scanner(System.in);
    
            System.out.println("Please enter your name: ");
            fullName = keyboard.nextLine();
    
            if(fullName.contains(" ")) {
                Scanner nameScanner = new Scanner(fullName);
                String name = nameScanner.next();
                surname = nameScanner.nextLine();
            }
    
        }
    

    【讨论】:

    • 感谢您的解决方案,但我搞砸了 String 方法并想出了这个 String fullName;扫描仪键盘 = new Scanner(System.in); System.out.print("请输入您的姓名:");全名 = 键盘.nextLine(); int i = fullName.indexOf(' ');字符串 s1 = fullName.substring(i); System.out.println("姓氏是" + s1);
    • 好吧,没有像我想象的那样粘贴我的代码 :-( 希望它有点意义
    猜你喜欢
    • 2021-11-25
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多