Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8中的字符串操作_Java_Java 8 - Fatal编程技术网

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

我已经用Java7编写了一些代码来操作字符串。如果字符串大小>=10,它将返回大小为10的子字符串,但如果大小小于10,它将在字符串中追加0。我想知道是否有一种方法可以使用streams和lambdas在Java8中编写相同的代码

在Java8中有一些与字符串操作相关的问题,但没有一个对我的问题有帮助

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();