我想从用户那里获取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()似乎不起作用。
答案 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]