删除Java String数组中元素的一部分

时间:2019-01-07 14:57:40

标签: java arrays string

我想从用户那里获取String数组中的输入。删除其中的几个部分,然后将其打印在其他文本区域中。

例如:

以String数组输入。

===========

先生:Alex Simmons
小姐:苏珊·肯特
太太:J。Peterson

===========

我希望输出看起来像这样。 删除Mr:,Miss:,Mrs:其余的值后在一行或元素中

===========
亚历克斯·西蒙斯(Alex Simmons)Susan Kent J. Peterson

===========

这是我正在使用的代码。

private void jButton18ActionPerformed(java.awt.event.ActionEvent evt) {
        String[] names = jTextArea11.getText().split("\\n");


        List<String> myList = new ArrayList<>(Arrays.asList(names));


        myList.remove("Mr:");
        myList.remove("Miss:");
        myList.remove("Mrs:");

        names = myList.toArray(new String[0]);

        jTextArea12.setText(Arrays.toString(names));
}

上面的代码似乎对我不起作用。

输出为:
[先生:亚历克斯·西蒙斯,小姐:苏珊·肯特,夫人:J。彼得森]

“ []”大括号结尾并用“,”分隔不是我想的。另外,remove()似乎不起作用。

7 个答案:

答案 0 :(得分:3)

您的代码不正确。您正在尝试从列表中删除元素。尝试下面的代码。它将循环显示您的列表。从每个元素中,它将用空字符串替换所需的字符串

 for (int i=0; i< myList.size();i++) {
      String newVal = myList.get(i).replace("Mr:", "").replace("Miss:", "").replace("Mrs:", "");
            myList.add(i,newVal);

}

更新:校正很小。替换后,我们必须重置列表中的替换值

答案 1 :(得分:2)

如果您使用Java 8,请看看map function

myList = myList.stream().map(s -> 
s.replaceAll("Mr|Miss|Mrs:","")).collect(Collectors.toList())

答案 2 :(得分:1)

您需要对元素进行更改,而对列表中没有更改,如

List<String> myList = new ArrayList<>(Arrays.asList(names));
List<String> res = new ArrayList<>();
for(String name : myList){
    res.add(name.replaceAll("((Mr:|Miss:|Mrs:)\\s)", "");
}

str = String.join(", ", res);
jTextArea12.setText(str);

您还可以使用Stream操作并直接转到String,而无需传递给en数组:

List<String> myList = new ArrayList<>(Arrays.asList(names));
String str = myList.stream()
                   .map(name -> name.replaceAll("((Mr:|Miss:|Mrs:)\\s)", ""))
                   .collect(Collectors.joining(", "));
jTextArea12.setText(str);

答案 3 :(得分:1)

这是使用子字符串完成此操作的一种方法。这会将所有名称粘贴在一起而不能使用空格。

    String[] names = {"Mr. Smith","Mrs. Smith","Ms. Smith"};

    String newString = "";

    for (int i = 0; i < names.length; i++) {
        if (names[i].substring(0, 3).equals("Mr.") || names[i].substring(0, 3).equals("Ms.")) {
            newString += names[i].substring(4);
        } else if (names[i].substring(0,4).equals("Mrs.")) {
            newString += names[i].substring(5);
        }
    }

答案 4 :(得分:0)

当前,当您执行三个remove调用时:

myList.remove("Mr:");
myList.remove("Miss:");
myList.remove("Mrs:");

您实际上是在尝试从myList中删除“先生:”,“小姐:”和“夫人:”,但这不是您想要的,而是您想要的是“从内部元素 myList中删除所述数据。

您可以通过典型的for循环来完成此操作,但是在此处使用流可能会更方便,因为稍后您需要将结果加入并为其设置jTextArea12

因此,拆分后,您可以使用流来满足上述要求:

String result = Arrays.stream(names)
          .map(s -> s.replace("Mr:", "").replace("Miss:", "").replace("Mrs:", ""))
          .collect(Collectors.joining(" "));

jTextArea12.setText(result);

完整代码:

private void jButton18ActionPerformed(java.awt.event.ActionEvent evt) {
     String[] names = jTextArea11.getText().split("\\n");

     String result = Arrays.stream(names)
              .map(s -> s.replace("Mr:", "")
                         .replace("Miss:", "").replace("Mrs:", ""))
              .collect(Collectors.joining(" "));

     jTextArea12.setText(result);
}

答案 5 :(得分:0)

这会将列表中的字符串替换为转换后的字符串,并且适用于任意数量的字符串,

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Mr: Alex Simmons", "Miss: Susan Kent", "Mrs: J. Peterson", "Mr: Abc", "Miss: Cdf");
        for (int i = 0; i < list.size(); i++) {
            list.set(i, list.get(i).replace("Mr:", ""));
            list.set(i, list.get(i).replace("Miss:", ""));
            list.set(i, list.get(i).replace("Mrs:", ""));
        }
        System.out.println(list);
    }
}

答案 6 :(得分:0)

使用substring的另一种解决方案。这种方法的优点是标题(先生,小姐等)没有经过硬编码。

如果标题存在,它将跳过该部分。否则,它将采用全名(请参阅列表中的1Peterson值)。

public static void main(String[] args) {
    List<String> stringList = new ArrayList<>();
    stringList.add("Mr: Alex Simmons");
    stringList.add("Miss: Susan Kent");
    stringList.add("Mrs: J. Peterson");
    stringList.add("1Peterson");

    List<String> outList = new ArrayList<>();

    for (String s : stringList) {
        outList.add(s.substring(s.indexOf(": ")+1));
    }

    System.out.println(outList);
}

输出:-

[Alex Simmons,Susan Kent,J。Peterson,1Peterson]