【问题标题】:making an array containing specific letters from another array of strings (Java) [closed]制作一个包含来自另一个字符串数组的特定字母的数组(Java)[关闭]
【发布时间】:2021-12-16 08:56:50
【问题描述】:

需要帮助,不胜感激!

我正在尝试创建一个方法,该方法采用数组的某个部分来创建一个仅包含这些部分的新数组。

例如,如果我有一个给定数组 S = [“John Smith”, “Alice Huntington”, “George H. Baker”, “Helen Z. Gordon”] 的数组,程序将返回数组 T = [“ JS”、“AH”、“GHB”、“HZG”]。

我在网上做了一些搜索,发现 charAt(0);我可以只取第一个首字母,但那是一个字符串,只有第一个字母。例如,我不知道要获取姓氏或中间名。我认为使用 ArrayList 是正确的选择,但我不知道如何将内容从一个传输到另一个。

【问题讨论】:

  • 你说你正在使用一个 ArrayList,但也说你有一个数组。 ArrayList 不是数组。它是哪一个?注意:使用列表几乎总是比使用数组更可取。

标签: java arrays arraylist


【解决方案1】:

您可以使用正则表达式来完成工作:

list.replaceAll(s -> s.replaceAll("(.)[^ ]* ?", "$1."));

这通过使用 lambda 将列表中的每个元素替换为其初始版本来工作。

lambda 的工作原理是匹配每个单词,将第一个字母捕获为第 1 组,以及尾随空格(如果有),并将匹配项替换为捕获的首字母和一个点。


测试代码:

List<String> list = Arrays.asList("John Smith", "Alice Huntington", "George H. Baker", "Helen Z. Gordon");
list.replaceAll(s -> s.replaceAll("(.)[^ ]* ?", "$1."));
System.out.println(list);

输出:

[J.S., A.H., G.H.B., H.Z.G.]

【讨论】:

    【解决方案2】:

    使用Stream API 是一种更简洁的方法。

    import java.util.Arrays;
    import java.util.stream.Collectors;
    
    public class Main {
        public static void main(String[] args) {
            String[] names = { "John Smith", "Alice Huntington", "George H. Baker", "Helen Z. Gordon" };
            String[] result = 
                    Arrays.stream(names)
                        .map(
                                s -> Arrays.stream(s.split("\\s+"))
                                        .map(w -> w.substring(0, 1) + ".")
                                        .collect(Collectors.joining())
                        )
                        .toArray(String[]::new);
    
            // Display
            System.out.println(Arrays.toString(result));
        }
    }
    

    输出:

    [J.S., A.H., G.H.B., H.Z.G.]
    

    【讨论】:

    • 像问题中提到的那样,您使用 substring 而不是 charAt(0) 的任何原因?
    • @Nexevis - 使用charAt(0) 需要将char 转换为String,这将是一个开销。
    • 它会自动转换,因为您附加了.,但您认为这是不好的做法吗?
    • @Nexevis - 是的,这不是一个好习惯。请查看this。当我找到它们时,我会在这里发布更多链接。
    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 2020-07-19
    • 1970-01-01
    • 2012-07-20
    • 2016-05-21
    • 2014-02-02
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多