我在想如何最好地将列表中所有元素的空格去除。
例如,如果我有String [] array = {" String", "Tom Selleck "," Fish "}
,我该如何将所有元素变为{"String","Tom Selleck","Fish"}
?
谢谢!
试试这个:
String[] trimmedArray = new String[array.length];
for (int i = 0; i < array.length; i++)
trimmedArray[i] = array[i].trim();
现在,trimmedArray
包含与array
相同的字符串,但没有前导和尾随空格。或者,你可以编写以下代码,在同一数组中就地修改这些字符串:
for (int i = 0; i < array.length; i++)
array[i] = array[i].trim();
另一种Java 8 Lambda选项:
String[] array2 = Arrays.stream(array).map(String::trim).toArray(String[]::new);
没有创建新数组的丑陋但经过优化的版本
Arrays.stream(array).map(String::trim).toArray(unused -> array);
原始的“array”被修改了。
在您的应用程序构建路径中添加 commons-lang3-3.1.jar。 使用以下代码片段来修剪字符串数组。
String array = {" String", "Tom Selleck "," Fish "};
array = StringUtils.stripAll(array);
在Java 8中,Arrays.parallelSetAll
似乎已经为此目的准备就绪:
import java.util.Arrays;
Arrays.parallelSetAll(array, (i) -> array[i].trim());
这将直接修改原始数组,用lambda表达式的结果替换每个元素。
我知道这是一个很老的帖子,但自从Java 1.8以来,有一种更好的方法可以修剪数组中的每个字符串。
Java 8 Lambda表达式解决方案:
List<String> temp = new ArrayList<>(Arrays.asList(yourArray));
temp.forEach(e -> {temp.set((temp.indexOf(e), e.trim()});
yourArray = temp.toArray(new String[temp.size()]);
使用这种解决方案,您无需创建新数组。
就像Óscar López的解决方案一样
temp.forEach(e -> { temp.set(temp.indexOf(e), s.trim()); });
,否则会出现语法错误。 - Pantelis SopasakisindexOf
查找索引对性能来说是很糟糕的,如果有重复元素则会失败! - Óscar Lópezarray[i].trim()
。array[i]
!!!否则迭代将没有任何效果。 - amitarray[i]
中。根据 OP 的需求,将它们存储在第二个数组中可能更好。 - hehewafflesarray[i]
。 - amitfun main(args: Array<String>) {
// array definition
val array = arrayListOf<String>(" String", "Tom Selleck "," Fish ")
println(array) // print original -> [ String, Tom Selleck , Fish ]
// remove leading and trailing spaces, result is arrayList
val sol1 = array.map { it.trim() }
println("sol1 = $sol1") // -> sol1 = [String, Tom Selleck, Fish]
// remove leading and trailing spaces, result is String
val sol2 = array.joinToString { it.trim() }
println("sol2 = $sol2") // -> sol2 = String, Tom Selleck, Fish
}
不知道OP在六年前是如何将{" String", "Tom Selleck "," Fish "}
存储到数组中的,我想分享一下我最终得出的结果。
我的数组是通过对一个字符串使用split函数得到的,该字符串可能在分隔符周围有额外的空格。我的解决方案是在分割点处处理这个问题。我的代码如下。经过测试,我将splitWithTrim()放入了我的项目的Utils类中。它可以处理我的用例;如果您决定使用它,您可能需要考虑会遇到哪些类型的字符串和分隔符。
public class Test {
public static void main(String[] args) {
test(" abc def ghi jkl ", " ");
test(" abc; def ;ghi ; jkl; ", ";");
}
public static void test(String str, String splitOn) {
System.out.println("Splitting \"" + str + "\" on \"" + splitOn + "\"");
String[] parts = splitWithTrim(str, splitOn);
for (String part : parts) {
System.out.println("(" + part + ")");
}
}
public static String[] splitWithTrim(String str, String splitOn) {
if (splitOn.equals(" ")) {
return str.trim().split(" +");
} else {
return str.trim().split(" *" + splitOn + " *");
}
}
}
Splitting " abc def ghi jkl " on " "
(abc)
(def)
(ghi)
(jkl)
Splitting " abc; def ;ghi ; jkl; " on ";"
(abc)
(def)
(ghi)
(jkl)
String val = "hi hello prince";
String arr[] = val.split(" ");
for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i]);
}