【问题标题】:Parsing a string to split into two names [closed]解析字符串以拆分为两个名称[关闭]
【发布时间】:2013-12-31 01:13:09
【问题描述】:

取一个字符串参数,它是一个名字,字符串中正好有两个名字,两个名字之间正好有一个空格。

例如,“马利,鲍勃”

我需要帮助来完成这个方法:它返回一个同名的字符串,但格式为“Bob Marley”

public static String convertName(String name) 
{

}

【问题讨论】:

  • 另一个作业?你尝试了什么?
  • 很多事情,全都没有用:) 我不是懒鬼,我还在学习。
  • @ReneaS。然后展示它。假设你做了类似 String.replace(","," ") 的事情。不仅有人可以解释如何解决它,还可以教你为什么你的不工作,给你两个好处。现在,您现在提交了两个糟糕的答案,可能需要修复他们的答案。

标签: java string parsing


【解决方案1】:
String[] arr = name.split(", ");
return arr[1]+" "+arr[0];

【讨论】:

    【解决方案2】:

    我将使用 StringTokenizer 和 StringBuilder 来解决这个问题

    public static String convertName(String name) 
    {
        StringTokenizer tokenizer = new StringTokenizer(name, ", ");
        String lastName = tokenizer.nextToken();
        String firstName = tokenizer.nextToken();
        StringBuilder builder = new StringBuilder();
        builder.append("\nfirstName : " + firstName);
        builder.append("\nlastName : " + lastName);
        return builder.toString();                  
    }
    

    【讨论】:

    • 我对此做了一些研究,似乎在JDK 1.4之后,不鼓励使用StringTokenizer在Java中拆分String,而是使用String.split(...)方法或使用java鼓励使用 .util.regex 包。
    • 你可以做一个性能测试,看看哪一个更快,split() 或tokenizer for a line and many lines;参考:stackoverflow.com/questions/736654/…
    • nextElement() 不返回字符串.....docs.oracle.com/javase/7/docs/api/java/util/… @openmike 如果速度很重要,则只需遍历字符串即可。
    • @openmike 我明白了!感谢您的参考!
    • 我对 tokenizer.nextToken() 进行了更改。对此感到抱歉。
    【解决方案3】:

    Apache Commons 库可提供出色的解决方案,除非您有特定要求。

    在你的类路径中有Commons Lang jar。下面的 sn-p 可能是需要的解决方案[虽然看起来不那么优雅]。

    StringUtils.replace(StringUtils.reverseDelimited(name, ','), ",", " ")
    

    StringUtils.reverseDelimited(name, delimiter) - 颠倒由分隔符标识的顺序。 例如:a,b,c 变成 c,b,a

    StringUtils.replace(name,searchString, replaceString) - 将所有出现的 searchString 替换为 replaceString

    参考 API - StringUtils - Commons Lang 2.6

    【讨论】:

    • 这不会包含名字和姓氏!
    • @bobbel 我没明白你的意思。根据方法声明和 OP 的问题,输入是“Bob, Marley”,输出需要是“Bob Marley”。
    • 读清楚:'Marley, Bob' 应该变成'Bob Marley'!
    • @bobbel 谢谢bobbel!现已忽略并更正。
    猜你喜欢
    • 2021-10-28
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2012-04-27
    • 2022-08-16
    相关资源
    最近更新 更多