Java8中的字符串操作
我已经用Java7编写了一些代码来操作字符串。如果字符串大小>=10,它将返回大小为10的子字符串,但如果大小小于10,它将在字符串中追加0。我想知道是否有一种方法可以使用streams和lambdas在Java8中编写相同的代码 在Java8中有一些与字符串操作相关的问题,但没有一个对我的问题有帮助Java8中的字符串操作,java,java-8,Java,Java 8,我已经用Java7编写了一些代码来操作字符串。如果字符串大小>=10,它将返回大小为10的子字符串,但如果大小小于10,它将在字符串中追加0。我想知道是否有一种方法可以使用streams和lambdas在Java8中编写相同的代码 在Java8中有一些与字符串操作相关的问题,但没有一个对我的问题有帮助 String s = "12345678"; String s1 = s; if(s.length() >= 10) { s1 = s1.substring(0,10); } e
String s = "12345678";
String s1 = s;
if(s.length() >= 10) {
s1 = s1.substring(0,10);
}
else {
for (int k = s.length() ; k < 10 ; k++) {
s1 = s1 + "0";
}
}
String s=“12345678”;
字符串s1=s;
如果(s.长度()>=10){
s1=s1.子串(0,10);
}
否则{
对于(int k=s.length();k<10;k++){
s1=s1+“0”;
}
}
我希望输出字符串“1234567800”。如果您有Java 11,您可以使用新的
字符串。重复方法
只需找出需要多少零就可以了intn=10-s.length()代码>
然后添加它s1=s+“0”。重复(n)代码>
在Java8中,可以使用流生成零
String zeros = Stream.generate(() -> "0").limit(n).collect(Collectors.joining());
s1 = s + zeros
您可以将Stream::generate
、Collectors::collecting和以及Collectors::join
组合起来,以获得一个单行解决方案,尽管这并不比
叫它
System.out.println(padd10("123"));
System.out.println(padd10("1234567800"));
这当然不是流API的任务。如果您仍然希望这样做,但将可读性和性能的损失降至最低,那么您可以使用
String s1 = IntStream.range(0, 10)
.map(i -> i<s.length()? s.charAt(i): '0')
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
或
这被称为填充
,顺便说一句。在线上有大量链接。我怀疑这是else块的替代品,因为它将生成一个0字符串,并将其与字符串s连接起来。有没有办法省略if-else块?
String s1 = IntStream.range(0, 10)
.map(i -> i<s.length()? s.charAt(i): '0')
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
int cap = Math.min(s.length(), 10);
String s1 = s.substring(0, cap)+"0000000000".substring(cap);
int cap = Math.min(s.length(), 10);
String s1=new StringBuilder(10).append(s, 0, cap).append("0000000000", cap, 10).toString();