如何在同一个 class 中将 split 方法与 stringbuilder 一起使用?
How to use split method with stringbuilder together in the same class?
用于隐藏元音的 StringBuilder:
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
StringBuilder sb = new StringBuilder(bienvenue_intro);
String[] introduction = bienvenue_intro.split(":");
for (int i = 0; i < bienvenue_intro.length(); i++) {
char c = bienvenue_intro.charAt(i);
if ((c == 'A') || (c == 'a') ||
(c == 'E') || (c == 'e') ||
(c == 'I') || (c == 'i') ||
(c == 'O') || (c == 'o') ||
(c == 'U') || (c == 'u')) {
sb.setCharAt(i, '*');
}
}
System.out.println(bienvenue_intro);
System.out.println(sb.toString());
以上代码的输出为:
Welcome! Java First Semester: 455, java street: City (State): Country: 575757
W*lc*m*! J*v* F*rst S*m*st*r: 455, j*v* str**t: C*ty (St*t*): C**ntry: 575757
分割断行的方法:
for (int i = 0; i < introduction.length; i++)
System.out.println(introduction[i]);
使用 split + string builder 的期望输出为:
W*lc*m*! J*v* F*rst S*m*st*r
455, j*v* str**t
C*ty (St*t*)
C**ntry
575757
但是两者结合起来不行!甚至可以将 StringBuilder 与 Split 方法组合在一起吗?
之前的String
不要拆分,先到改造。 StringBuilder
将为您执行就地字符替换并使用 toString()
获取替换的字符串并对其执行拆分。
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
StringBuilder sb = new StringBuilder(bienvenue_intro);
for (int i = 0; i < bienvenue_intro.length(); i++) {
char c = bienvenue_intro.charAt(i);
if ( (c == 'A') || (c == 'a')
|| (c == 'E') || (c == 'e')
|| (c == 'I') || (c == 'i')
|| (c == 'O') || (c == 'o')
|| (c == 'U') || (c == 'u')) {
sb.setCharAt(i, '*');
}
}
System.out.println(bienvenue_intro);
//System.out.println(sb.toString());
String[] introduction = sb.toString().split(":"); //<-- Do the split here after replacements.
for (String string : introduction) {
System.out.println(string);
}
输出:
W*lc*m*! J*v* F*rst S*m*st*r
455, j*v* str**t
C*ty (St*t*)
C**ntry
575757
有一种更好更简单的方法:)
replaceAll()
和 split()
.
public static void main(String[] args) {
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
String[] arr = bienvenue_intro.replaceAll("(?i)[aeiou]+", "*").split(":");
for(String s : arr) {
System.out.println(s);
}
}
W*lc*m*! J*v* F*rst S*m*st*r
455, j*v* str*t
C*ty (St*t*)
C*ntry
575757
我想扩展@YoungHobbit 给出的答案。我不是专家,但这些是我的观察:
- 不需要使用StringBuilder。在这里阅读更多:when to use StringBuilder in java
- 您可以使用正则表达式进行转换。在这里阅读更多:How to replace replace vowels with a special character in Java?
我的看法:
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
String mod_str = bienvenue_intro.replaceAll( "(?i)[aeiou]", "*" );
String[] introduction = mod_str.split(":");
for (String string : introduction) {
System.out.println(string);
}
我认为您的方法完全错误:已经有一个 API 可以在一个易于阅读的代码行中执行此操作:
System.out.println(bienvenue_intro.replaceAll("[aeiouAEIOU]", "*").replace(":", "\n"));
用于隐藏元音的 StringBuilder:
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
StringBuilder sb = new StringBuilder(bienvenue_intro);
String[] introduction = bienvenue_intro.split(":");
for (int i = 0; i < bienvenue_intro.length(); i++) {
char c = bienvenue_intro.charAt(i);
if ((c == 'A') || (c == 'a') ||
(c == 'E') || (c == 'e') ||
(c == 'I') || (c == 'i') ||
(c == 'O') || (c == 'o') ||
(c == 'U') || (c == 'u')) {
sb.setCharAt(i, '*');
}
}
System.out.println(bienvenue_intro);
System.out.println(sb.toString());
以上代码的输出为:
Welcome! Java First Semester: 455, java street: City (State): Country: 575757
W*lc*m*! J*v* F*rst S*m*st*r: 455, j*v* str**t: C*ty (St*t*): C**ntry: 575757
分割断行的方法:
for (int i = 0; i < introduction.length; i++)
System.out.println(introduction[i]);
使用 split + string builder 的期望输出为:
W*lc*m*! J*v* F*rst S*m*st*r
455, j*v* str**t
C*ty (St*t*)
C**ntry
575757
但是两者结合起来不行!甚至可以将 StringBuilder 与 Split 方法组合在一起吗?
之前的String
不要拆分,先到改造。 StringBuilder
将为您执行就地字符替换并使用 toString()
获取替换的字符串并对其执行拆分。
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
StringBuilder sb = new StringBuilder(bienvenue_intro);
for (int i = 0; i < bienvenue_intro.length(); i++) {
char c = bienvenue_intro.charAt(i);
if ( (c == 'A') || (c == 'a')
|| (c == 'E') || (c == 'e')
|| (c == 'I') || (c == 'i')
|| (c == 'O') || (c == 'o')
|| (c == 'U') || (c == 'u')) {
sb.setCharAt(i, '*');
}
}
System.out.println(bienvenue_intro);
//System.out.println(sb.toString());
String[] introduction = sb.toString().split(":"); //<-- Do the split here after replacements.
for (String string : introduction) {
System.out.println(string);
}
输出:
W*lc*m*! J*v* F*rst S*m*st*r
455, j*v* str**t
C*ty (St*t*)
C**ntry
575757
有一种更好更简单的方法:)
replaceAll()
和 split()
.
public static void main(String[] args) {
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
String[] arr = bienvenue_intro.replaceAll("(?i)[aeiou]+", "*").split(":");
for(String s : arr) {
System.out.println(s);
}
}
W*lc*m*! J*v* F*rst S*m*st*r
455, j*v* str*t
C*ty (St*t*)
C*ntry
575757
我想扩展@YoungHobbit 给出的答案。我不是专家,但这些是我的观察:
- 不需要使用StringBuilder。在这里阅读更多:when to use StringBuilder in java
- 您可以使用正则表达式进行转换。在这里阅读更多:How to replace replace vowels with a special character in Java?
我的看法:
String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
String mod_str = bienvenue_intro.replaceAll( "(?i)[aeiou]", "*" );
String[] introduction = mod_str.split(":");
for (String string : introduction) {
System.out.println(string);
}
我认为您的方法完全错误:已经有一个 API 可以在一个易于阅读的代码行中执行此操作:
System.out.println(bienvenue_intro.replaceAll("[aeiouAEIOU]", "*").replace(":", "\n"));