import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class Testtest{
public static void main(String[] args){
String einString = Terminal.askString("String: ");
String[] arrayWord = einString.split("");
char[] arrayChar = einString.toCharArray();
char[] count = new char[arrayChar.length];
int[] number = new int[count.length];
for(int i=0; i<arrayWord.length; i++){
if((byte)arrayChar[i]>64&&(byte)arrayChar[i]<91){
count[i] = arrayChar[i];
if((byte)arrayChar[i]>96&&(byte)arrayChar[i]<123){
for(int j=i+1; j<count.length-1; j++){
count[j] = count[j+1];
}
break;
}
}
System.out.println(count[i]);
}
System.out.println(count.length);
}
}
因此,我只想获取用户输入字符串时大写字母的数量。但正如您在图片中看到的,我成功删除了 Alphabet 的小写字母,但问题是它仍然是一个空的地方。所以当我使用 .length 时,这些都会被计算在内。我应该做什么?
最佳答案
我不确定我是否理解代码中的所有内容(例如,内部循环有什么用?)。
如果您只想在字符串中保留大写字符,可以使用流。给定一个字符串 s
,您有两个相关的流:s.chars()
和 s.codePoints()
:
public class StringTest {
private static String filterUpperCase1(String s) {
return s.chars().filter(Character::isUpperCase)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
private static String filterUpperCase2(String s) {
int[] a = s.chars().filter(Character::isUpperCase).toArray();
return new String(a, 0, a.length);
}
private static String filterUpperCase3(String s) {
return s.codePoints().filter(Character::isUpperCase)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
private static String filterUpperCase4(String s) {
int[] a = s.codePoints().filter(Character::isUpperCase).toArray();
return new String(a, 0, a.length);
}
public static void main(String[] args) {
String s = "AaBbCc𝐀𝐚𝐁𝐛𝐂𝐜";
System.out.println(filterUpperCase1(s));
System.out.println(filterUpperCase2(s));
System.out.println(filterUpperCase3(s));
System.out.println(filterUpperCase4(s));
}
}
输出将是:
ABC
ABC
ABC𝐀𝐁𝐂
ABC𝐀𝐁𝐂
此处 filterUpperCase1
和 filterUpperCase2
说明了使用 char
(而不是代码点)可能发生的问题。通过在代码中使用String.toCharArray()
,您也会遇到同样的问题。
请注意,前六个字符是 ASCII 字母,后六个字符是 mathematical characters BMP之外.
char
是一个 16 位值,可能等于也可能不等于字符(仅适用于 BMP 中的字符),而代码点可以对任何 Unicode 字符进行编码。这里我不考虑combining characters和equivalence .
这里,filterUpperCase1
和 filterUpperCase2
中存在一个额外的错误,因为 Character.isUpperCase(int)
需要一个代码点,但为了调用 Character.isUpperCase(char)
而转换为 char
不会更改输出。
关于java - 如何删除 char 数组中的空白位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59345871/