如何解决如何在字符串中的字符左右添加空格?
我试图打印出一个字符串,字符串中每个字符的两边都有空格
所以如果我有
String s = "abcde"
它会创建这样的东西
a b c d e
第一个字符前有一个空格,每个字符之间有三个空格。
以我的知识,我一直无法找到一种方法来做到这一点。
解决方法
更新
更新要求:
我没有意识到我需要在前面添加一个位置的东西
第一项,然后每项之间有 3 个空格。
_0___0___0___0___0_
例如。
对于更新的要求,您可以使用另一个很酷的东西,String#join
。
public class Main {
public static void main(String[] args) {
String s = "abcde";
String result = "_" + String.join("___",s.split("")) + "_";
System.out.println(result);
}
}
输出:
_a___b___c___d___e_
原答案
可以有很多方法来做到这一点。我发现使用正则表达式更容易做到:
public class Main {
public static void main(String[] args) {
String s = "abcde";
String result = s.replaceAll("."," $0 ");
System.out.println(result);
}
}
输出:
a b c d e
正则表达式,.
匹配单个字符,$0
用空格 + 匹配 + 空格替换此匹配。
另一种很酷的方法是使用 Stream API。
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String s = "abcde";
String result = Arrays.stream(s.split(""))
.map(str -> " " + str + " ")
.collect(Collectors.joining());
System.out.println(result);
}
}
输出:
a b c d e
,
一个超级简单的例子,它不能处理大量潜在的输入场景。
public static void main(String[] args)
{
String s = "abcde";
for (int i = 0; i < s.length(); ++i) {
System.out.print("_" + s.charAt(i));
}
System.out.println("_");
}
注意:使用下划线而不是空格以允许目视检查输出。
示例输出:
_a_b_c_d_e_
例如,可以将 StringBuilder
和 .append
用于构建器,而不是直接输出。
使用 StringBuilder:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); ++i) {
sb.append('_').append(s.charAt(i));
}
sb.append('_');
System.out.println(sb.toString());
基于所需输出略有不同的评论(两个内部空格,一个前导和尾随空格),这建议了另一种方法:
public static String addSpace(String inp) {
StringBuilder sB = new StringBuilder();
String string = inp.trim();
String div = "___"; // spaces,or whatever
sB.append('_'); // add leading space
for(int index = 0; index < string.length(); ++index) {
sB.append(string.charAt(index))
.append(div); // two spaces
}
sB.setLength(sB.length() - (div.length() - 1) );
return (sB.toString());
}
注意:再次使用下划线以便于调试。
当 div
设置为 3 个下划线(或空格)时的输出:
_0___0___0___1___0___1___1___0_
,
你可以定义一个空字符串:result = "";
然后用 foreach 循环遍历你想打印的字符串 用函数 toCharArray()
(char 字符:str.toCharArray())
在这个循环中做 ->
结果+=“”+字符;
,String result = s.chars().mapToObj(
Character::toString
).collect(Collectors.joining(" "));
类似于循环版本,但使用流。
,通过将 String 拆分为 String[] 字符并通过空格连接它们来实现此目的的另一个衬垫:
public class Main {
public static void main(String[] args) {
String s = "abcde";
System.out.println(" " + String.join(" ",s.split("")) + " ");
}
}
输出:
a b c d e
编辑:
上面的代码不适用于像“?ab?”这样的带有 Unicode 代码点的字符串,所以不是在空字符串上拆分,而是在正则表达式上执行拆分:"(?<=.)"
。
public class Main {
public static void main(String[] args) {
String s = "abcde";
System.out.println(" " + String.join(" ",s.split("(?<=.)")) + " ");
}
}
感谢@saka1029 指出这一点。
,您可以使用带有三个参数的 Collectors.joining(delimiter,prefix,suffix)
方法:
String s1 = "abcde";
String s2 = Arrays.stream(s1.split(""))
.collect(Collectors.joining("_+_","-{","}-"));
System.out.println(s2); // -{a_+_b_+_c_+_d_+_e}-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。