如何从数组中的所有元素修剪空白?

时间:2012-03-25 22:13:36

标签: java arrays string

我只是想知道从列表的所有元素中删除空格的最佳方法是什么。

例如,如果我有String [] array = {" String", "Tom Selleck "," Fish "} 我怎样才能将所有元素都{"String","Tom Selleck","Fish"}

谢谢!

9 个答案:

答案 0 :(得分:53)

试试这个:

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();

答案 1 :(得分:19)

另一个java 8 lambda选项:

String[] array2 = Arrays.stream(array).map(String::trim).toArray(String[]::new);

没有新阵列创建的丑陋但优化的版本

Arrays.stream(array).map(String::trim).toArray(unused -> array);

修改原始“数组”。

答案 2 :(得分:11)

在应用程序构建路径中添加commons-lang3-3.1.jar。 使用下面的代码片段修剪String数组。

String array = {" String", "Tom Selleck "," Fish "};
array = StringUtils.stripAll(array);

答案 3 :(得分:6)

我知道这是一个非常古老的帖子,但是从Java 1.8开始,有一种更好的方法来修剪数组中的每个字符串。

Java 8 Lamda Expression解决方案:

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()]);

使用此解决方案,您无需创建新阵列。 ˙喜欢ÓscarLópez的解决方案

答案 4 :(得分:6)

在Java 8中,Arrays.parallelSetAll似乎已经为此目的做好了准备:

import java.util.Arrays;

Arrays.parallelSetAll(array, (i) -> array[i].trim());

这将修改原始数组,用lambda表达式的结果替换每个元素。

答案 5 :(得分:5)

您可以遍历数组中的元素并在每个元素上调用array[i].trim()

答案 6 :(得分:2)

对于那些在Kotlin中寻求相同解决方案且仅针对Java的人(如我)-如何在Kotlin中进行裁剪:

fun 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
}

答案 7 :(得分:0)

我不知道OP最初是如何发生{" String", "Tom Selleck "," Fish "}(6年前)的,我以为我会分享最终的结果。

我的数组是对字符串使用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)

答案 8 :(得分:-2)

String val = "hi hello prince";
String arr[] = val.split(" ");

for (int i = 0; i < arr.length; i++)
{   
     System.out.print(arr[i]);
}