打印不带括号和逗号的数组
Posted
技术标签:
【中文标题】打印不带括号和逗号的数组【英文标题】:Print array without brackets and commas 【发布时间】:2011-05-22 07:52:36 【问题描述】:我正在将 Hangman 游戏移植到 android,但遇到了一些问题。最初的 Java 程序使用控制台,所以现在我必须以某种方式美化输出,使其适合我的 Android 布局。
如何?该数组包含斜线,并在猜到正确字母时被一一替换。
我正在使用ArrayList
类的常用.toString()
函数,我的输出格式如下:[ a, n, d, r, o, i, d ]
。我希望它简单地将数组打印为单个String
。
我使用这段代码填充数组:
List<String> publicArray = new ArrayList<>();
for (int i = 0; i < secretWordLength; i++)
hiddenArray.add(secretWord.substring(i, i + 1));
publicArray.add("-");
然后我这样打印:
TextView currentWordView = (TextView) findViewById(R.id.CurrentWord);
currentWordView.setText(publicArray.toString());
任何帮助将不胜感激。
【问题讨论】:
List 接口上的 toString() 方法实际上只是用于调试和日志记录。你不应该用它来向用户展示输出。 【参考方案1】:用空格替换括号和逗号。
String formattedString = myArrayList.toString()
.replace(",", "") //remove the commas
.replace("[", "") //remove the right bracket
.replace("]", "") //remove the left bracket
.trim(); //remove trailing spaces from partially initialized arrays
【讨论】:
右括号的替换方法调用错误地包含左括号。但否则它会起作用。 只是不要将包含括号和逗号的元素放在列表中。 由于上述评论,这不应该得到如此高的评价。【参考方案2】:基本上,不要使用ArrayList.toString()
- 自己构建字符串。例如:
StringBuilder builder = new StringBuilder();
for (String value : publicArray)
builder.append(value);
String text = builder.toString();
(顺便说一下,我个人不会调用变量publicArray
,因为它实际上不是一个数组。)
【讨论】:
【参考方案3】:您可以使用 android.text.TextUtils 类中的 join 方法,例如:
TextUtils.join("",array);
【讨论】:
这是 Android 上下文的最佳方式。快速简单。 TextUtils 也采用 Iterable 对于 Android,这是最好的答案,该方法同时接受数组和列表。【参考方案4】:第一
StringUtils.join(array, "");
秒
Arrays.asList(arr).toString().substring(1).replaceFirst("]", "").replace(", ", "")
编辑
可能是最好的一个:Arrays.toString(arr)
【讨论】:
StringUtils 在我看来是更干净的选项。 +1 作为奖励StringUtils
不需要字符串数组,它适用于整数、双精度、对象等。【参考方案5】:
对于 Java 8 或更高版本,您可以使用 String.join
,它提供相同的功能:
返回一个由 CharSequence 元素的副本和指定分隔符的副本连接在一起的新字符串
String[] array = new String[] "a", "n", "d", "r", "o", "i", "d" ;
String joined = String.join("", array); //returns "android"
对于不同类型的数组,应该将其转换为 String 数组或字符序列 Iterable:
int[] numbers = 1, 2, 3, 4, 5, 6, 7 ;
//both of the following return "1234567"
String joinedNumbers = String.join("",
Arrays.stream(numbers).mapToObj(String::valueOf).toArray(n -> new String[n]));
String joinedNumbers2 = String.join("",
Arrays.stream(numbers).mapToObj(String::valueOf).collect(Collectors.toList()));
String.join
的第一个参数是分隔符,可以相应更改。
【讨论】:
【参考方案6】:如果你使用Java8或以上,你可以使用with stream() with native。
publicArray.stream()
.map(Object::toString)
.collect(Collectors.joining(" "));
参考文献
Use Java 8 Language Features JavaDoc StringJoiner Joining Objects into a String with Java 8 Stream API【讨论】:
【参考方案7】:删除括号最简单的解决方案是,
1. 使用 .toString() 方法将数组列表转换为字符串。
2.使用String.substring(1,strLen-1)。(其中strLen是从arraylist转换后的字符串长度)。
3.Hurraaah..结果字符串是去掉括号的字符串。
希望这是有用的...:-)
【讨论】:
【参考方案8】:我用过 Arrays.toString(array_name).replace("[","").replace("]","").replace(", ",""); 正如我从上面的一些 cmets 中看到的那样,我还在逗号后添加了一个额外的空格字符(.replace(", ","") 部分),因为在我打印时在新行中取出每个值,仍然有 空格字符 移动单词。它解决了我的问题。
【讨论】:
【参考方案9】:我使用了 join() 函数,例如:
i=new Array("Hi", "Hello", "Cheers", "Greetings");
i=i.join("");
哪个打印:HiHelloCheersGreetings
查看更多:javascript Join - Use Join to Make an Array into a String in Javascript
【讨论】:
问题是关于Java的 这在 java.. ["this","stuff"].join(","); =“这个,东西”【参考方案10】:String[] students = "John", "Kelly", "Leah";
System.out.println(Arrays.toString(students).replace("[", "").replace("]", " "));
//output: John, Kelly, Leah
【讨论】:
这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案11】:您可以使用为 Java 8 及更高版本的流提供的 reduce 方法。请注意,您必须首先映射到字符串以允许在 reduce 运算符内进行连接。
publicArray.stream().map(String::valueOf).reduce((a, b) -> a + " " + b).get();
【讨论】:
【参考方案12】:只需用您的数组初始化一个String
对象
String s=new String(array);
【讨论】:
以上是关于打印不带括号和逗号的数组的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python itertools 输出中删除字符串引号、逗号和括号?