如何将字符串中的第一个单词大写,并根据给定字符串中的单词长度处理最后一个单词
How to capitalise first word in a String, and manipulate the last word based on word's length in a given string
Suppose String given is " this is a book ".
条件:
将字符串中的每个字母更改为大写字母,如果每个字符串中的单词定义为超过 3 个字母,则将第 4 个字母替换为“.”点,最后连起来的点代表3个点
这里,
输出将是
Thi... Is A Boo...
我试过的程序,但无法将最后一个字符替换为三个点。
public class Tip2 {
public static void main(String[] args) {
StringBuilder str = new StringBuilder();
String testString = "this is a book";
String[] tokens = testString.split("\s");
for (String token : tokens) {
str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
}
str.toString().trim();
System.out.println(str);
我怎样才能这样计算和连接?有什么办法可以检查吗?
正如 Kevin 所说,您可以检查长度并附加 .
、
for (String token : tokens) {
String subString = token.length() == 4 ? token.substring(1, token.length()-1)+"..." : token.substring(1);
str.append(Character.toUpperCase(token.charAt(0))).append(subString).append(" ");
}
for (String token : tokens){
token = token.substring(0, 1).toUpperCase() + token.substring(1);
if (token.length() > 3){
token = token.substring(0, 3) + "...";
}
str.append(token).append(" ");
}
所以在这里它将每个首字母转换为大写,然后检查长度并处理它是否大于 3,最后将它们附加到 str
.
谢谢,我还通过 Streams 将其更改为一种方法:
try{
Stream.of(testString.split(" ")).forEach(s -> {
if (s.length() > 3) {
System.out.print(s.substring(0,1).toUpperCase().concat(s.substring(1,3).concat("...")+" "));
}
else{
System.out.print(s.substring(0,1).toUpperCase().concat(s.substring(1,s.length()))+" ");
}
});
}catch (StringIndexOutOfBoundsException ex){
ex.printStackTrace();
}
正在工作。
下面给出了如何在一条语句中完成:
Arrays.stream(str.split("\s+"))
.map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.forEach(System.out::println);
解释:
- Arrays.stream
- String#split
\s+
是一个正则表达式模式,它指定一个或多个 space(s)。检查 this 以了解有关正则表达式模式的更多信息
- Stream#map
- String#substring。请注意,它有两个变体。
- String#replaceAll
.
作为正则表达式模式指定每个字符。
- Stream#forEach
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String str = "this is a booking";
Arrays.stream(str.split("\s+"))
.map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.forEach(System.out::println);
}
}
输出:
Thi.
Is
A
Boo....
如果要创建单个字符串,collect the stream into a List and join 元素使用 " "
作为分隔符。
演示:
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String str = "this is a booking";
String result = String.join(" ",
Arrays.stream(str.split("\s+")).map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.collect(Collectors.toList()));
System.out.println(result);
}
}
输出:
Thi. Is A Boo....
[更新] .
可以通过使用.collect(Collectors.joining(" ")))
而不是[使用.collect(Collectors.toList())
[收集到List
然后使用[=加入List
的元素来进一步优化23=]].
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String str = "this is a booking";
String result = Arrays.stream(str.split("\s+"))
.map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.collect(Collectors.joining(" "));
System.out.println(result);
}
}
您可以尝试修改如下代码
for (String token : tokens) {
if(token.length() > 3) {
token = token.replace(token.substring(3),"...");
}
str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
}
str.toString().trim();
System.out.println(str);
Suppose String given is " this is a book ".
条件: 将字符串中的每个字母更改为大写字母,如果每个字符串中的单词定义为超过 3 个字母,则将第 4 个字母替换为“.”点,最后连起来的点代表3个点
这里,
输出将是
Thi... Is A Boo...
我试过的程序,但无法将最后一个字符替换为三个点。
public class Tip2 {
public static void main(String[] args) {
StringBuilder str = new StringBuilder();
String testString = "this is a book";
String[] tokens = testString.split("\s");
for (String token : tokens) {
str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
}
str.toString().trim();
System.out.println(str);
我怎样才能这样计算和连接?有什么办法可以检查吗?
正如 Kevin 所说,您可以检查长度并附加 .
、
for (String token : tokens) {
String subString = token.length() == 4 ? token.substring(1, token.length()-1)+"..." : token.substring(1);
str.append(Character.toUpperCase(token.charAt(0))).append(subString).append(" ");
}
for (String token : tokens){
token = token.substring(0, 1).toUpperCase() + token.substring(1);
if (token.length() > 3){
token = token.substring(0, 3) + "...";
}
str.append(token).append(" ");
}
所以在这里它将每个首字母转换为大写,然后检查长度并处理它是否大于 3,最后将它们附加到 str
.
谢谢,我还通过 Streams 将其更改为一种方法:
try{
Stream.of(testString.split(" ")).forEach(s -> {
if (s.length() > 3) {
System.out.print(s.substring(0,1).toUpperCase().concat(s.substring(1,3).concat("...")+" "));
}
else{
System.out.print(s.substring(0,1).toUpperCase().concat(s.substring(1,s.length()))+" ");
}
});
}catch (StringIndexOutOfBoundsException ex){
ex.printStackTrace();
}
正在工作。
下面给出了如何在一条语句中完成:
Arrays.stream(str.split("\s+"))
.map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.forEach(System.out::println);
解释:
- Arrays.stream
- String#split
\s+
是一个正则表达式模式,它指定一个或多个 space(s)。检查 this 以了解有关正则表达式模式的更多信息- Stream#map
- String#substring。请注意,它有两个变体。
- String#replaceAll
.
作为正则表达式模式指定每个字符。- Stream#forEach
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String str = "this is a booking";
Arrays.stream(str.split("\s+"))
.map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.forEach(System.out::println);
}
}
输出:
Thi.
Is
A
Boo....
如果要创建单个字符串,collect the stream into a List and join 元素使用 " "
作为分隔符。
演示:
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String str = "this is a booking";
String result = String.join(" ",
Arrays.stream(str.split("\s+")).map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.collect(Collectors.toList()));
System.out.println(result);
}
}
输出:
Thi. Is A Boo....
[更新]
可以通过使用.collect(Collectors.joining(" ")))
而不是[使用.collect(Collectors.toList())
[收集到List
然后使用[=加入List
的元素来进一步优化23=]].
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String str = "this is a booking";
String result = Arrays.stream(str.split("\s+"))
.map(s -> s.substring(0, 1).toUpperCase()
+ (s.length() > 3 ? (s.substring(1, 3) + s.substring(3).replaceAll(".", ".")) : s.substring(1)))
.collect(Collectors.joining(" "));
System.out.println(result);
}
}
您可以尝试修改如下代码
for (String token : tokens) {
if(token.length() > 3) {
token = token.replace(token.substring(3),"...");
}
str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
}
str.toString().trim();
System.out.println(str);