问题描述
我正在从事一些anroid工作室项目。我有问题。
我有一个名为result_stack的堆栈。 -> result_stack = [K,T,E,J,O,S,O,G,O,J]
我试图将此堆栈转换为字符串-> String final_result = String.valueOf(result_stack);
现在,当我尝试打印final_result-> System.out.println(final_result);
->它会显示[K,T,E,J,O,S,O,G,O,J]
但是我要删除所有逗号,方括号和空格。我的意思是,我想像这样打印“ KTEJOSOGOJ”,然后将其设置为文本视图。
我尝试过,但没有任何改变:
final_result.replaceAll(",","");
System.out.println(final_result);
我仍然得到[K,T,E,J,O,S,O,G,O,J]作为输出。请帮助我。
解决方法
您仍然看到旧值的原因是因为Strings
是不可变的(一旦创建,就不会更改。)
解决方案是将final_result
变量设置为replaceAll
方法调用的结果。我很奇怪。
像这样:final_result = final_result.replaceAll(",","");
p.s。您也需要替换空格和方括号,但要弄清楚:)
,不要调用String.valueOf(result_stack)
或result_stack.toString()
,而要尝试“修复”结果。而是正确地构建字符串。
Stack<String> result_stack = new Stack<>();
result_stack.addAll(Arrays.asList("K","T","E","J","O","S","G","J"));
// The wrong way,don't do this
String final_result1 = String.valueOf(result_stack);
System.out.println(final_result1);
// The correct way (Java 8+)
String final_result2 = result_stack.stream().collect(Collectors.joining());
System.out.println(final_result2);
// The correct way (Java 1.5+)
StringBuilder buf = new StringBuilder();
for (String value : result_stack)
buf.append(value);
String final_result3 = buf.toString();
System.out.println(final_result3);
输出
[K,T,E,J,O,S,G,J]
KTEJOSOGOJ
KTEJOSOGOJ
,
使用正则表达式删除除字母以外的所有符号
String final_result = String.valueOf(result_stack).replaceAll("[^a-zA-Z]","");
,
我是用数组而不是堆栈来完成的,但是如果在将堆栈转换为字符串时得到方括号和逗号,则同样的想法适用,您只需要对replace()
进行一些调用:
import java.util.*;
public class MyClass {
public static void main(String args[]) {
String[] array = {"K","J"};
System.out.println(Arrays.toString(array).replace(","").replace("[","").replace("]","").replace(" ",""));
}
}
这将打印以下内容:KTEJOSOGOJ
再一次,您可以通过调用substring()
来实现相同的目的,而不是对replace()
进行如此多次的调用。请记住,字符串在Java中是不可变的,因此您需要分配在String类型的对象上调用的方法的结果,除非像我一样将它们链接为另一个方法的输入。
String HomeName = "[K,J]";
String Replace = HomeName.replaceAll("[^a-zA-Z0-9\\\\s+]","");
UserName.setText(Replace);
输出
KTEJOSOGOJ