【问题标题】:Convert array to string without brackets, commas, or spaces将数组转换为不带括号、逗号或空格的字符串
【发布时间】:2017-02-24 00:37:41
【问题描述】:

我正在尝试将单个字母(例如 {“a”、“b”、“c”})的数组列表转换为由所有这些字母组合而成的字符串——为了——一个字。所以在上面的例子中,数组是 {"a", "b", "c"},单词是 "abc"。我目前正在使用以下代码:

ArrayList<String> arr = new ArrayList<String>();
String str = "a"; //this is just to define it before hand with a random value
*after a lot more code*
str = Arrays.toString(arr.toArray()).replace("[", "").replace("]", "").replace(",", "");
System.out.println(str);

这行得通——我得到的结果没有括号或逗号,但由于我用空格替换了逗号和括号,我得到的是“a b c”而不是“abc”。有没有办法改变这一点,所以我可以用完全没有空格而不是空格来替换逗号?我想更好的表达方式是完全删除逗号和括号。

非常感谢您的帮助。

【问题讨论】:

  • 添加初始化 stringOne 和 stringTwo 的行会有所帮助。
  • 那么您是从“一组单个字母”开始还是从单个String stringOne 开始?文字说明了一件事,代码说明了另一件事。
  • 对不起@JLewkovich 我刚刚澄清了。我的意思是说数组列表,而不是字符串。你可以看到上面的编辑。希望这会有所帮助。

标签: java arrays string


【解决方案1】:
String[] sa = new String[] {"a", "b", "c"};
System.out.println(String.join("", sa));

Stream API 是在 JDK1.8 中定义的

【讨论】:

  • 这与 Stream API 有什么关系?你的意思是说String.join 从 1.8 开始可用
  • .join() 函数不是只能在 javascript 中使用吗?
  • @AndrewChu String.join()在JDK1.8中引入
【解决方案2】:

您可以使用StreamCollectors.joining() 之类的

String[] arr = { "a", "b", "c" };
System.out.println(Stream.of(arr).collect(Collectors.joining()));

哪个输出(按要求)

abc

【讨论】:

  • 感谢您的回复!当我实现它时,它给了我一个错误,说“Collectors.joining()”没有定义。所以我在我的代码开头添加了:import java.util.stream; import java.lang.Object; import java.util.stream.Collectors;,然后它给了我一个错误,说找不到“类流”。你有什么建议吗?
  • 您使用的是什么版本的 Java? Streams API 需要 Java 8。
  • @matt 我不确定。一查怎么查?不过,我正在使用 BlueJ 编写和编译我的代码。
  • @Andrew Chu 我不确定我以前没有使用过 BlueJ,但是,我认为这只是你的导入错误。试试这些(注意我正在从java.util.stream 包中导入Stream 类。import java.util.stream.Collectors; import java.util.stream.Stream;
  • @matt 感谢您的帮助。导入现在可以工作了,但是 .collect() 函数出现错误,说“没有找到适合收集的方法...”
【解决方案3】:

假设您要从输入字符串中删除不是字母字符的任何内容,您可以使用:

    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i < input.length(); i++) {
        if (Character.isAlphabetic(input.charAt(i))) {
            sb.append(input.charAt(i));
        }
    } 

    return sb.toString();

【讨论】:

    【解决方案4】:

    当你打电话时:

    System.out.println(stringOne);
    

    真正发生的是System.out.println隐式调用数组的toString()方法来获取它的字符串表示:

    System.out.println(stringOne.toString());
    

    Array.toString() 的实现返回数组元素(或者更确切地说,数组元素的 toString() 表示形式),逗号分隔。

    如果您想要不同的表示,您有两种选择。您可以创建一个扩展基数组类的新数组类,并覆盖toString() 方法以返回所需的字符串表示形式。这.. 可能不是您想要做的,但它是一种选择。

    或者,您可以自己处理数组并构造所需的字符串表示形式。 @Elliott Frisch 展示了一种使用 Java 8 中可用的 Streams API 的好方法。

    还有很多其他方法可以达到相同的效果。这是一个快速而肮脏的for循环实现:

    StringBuilder arrayAsString = new StringBuilder();
    String delimiter = "";
    for(String element : arr) {
        arrayAsString.append(delimiter).append(element);
        delimiter = ","; // I hate this idiom but it's handy for joining strings when you don't have a better .join() method available.
    }
    
    System.out.println(arrayAsString.toString()); // calling toString() explicitly for clarity, but it's not necessary
    

    【讨论】:

      【解决方案5】:

      添加 replaceAll() 对我有用。

      str = Arrays.toString(arr.toArray()).replace("[", "").replace("]", "").replace(",", "").replaceAll(" ", "")
      

      【讨论】:

      • 注意 String.replaceAll() 的性能,它需要一个正则表达式。我认为你的情况没有必要。
      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2019-01-24
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多