在Java中,删除字符串中的多个字符

In Java, removing many character of a string

在 java 中,我想删除字符串中的字符 - 这是我的源代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws Exception {
        // Let's challenge in my favorite language!!
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        Integer n = line.length();
        for(int i=1;i<=n;i++){
            if(i%2==0)
            {
                line = line.substring(i);
            }   
        }
        System.out.println(line);
    }
}  

我输入了一个字符串

PXaeiTzVap

那我要结果

Paiza

我该怎么做?

据我了解,您想要每隔一个字符删除一次。

我会为此使用 for 循环:

String out = "";
for(int i = 0; i < line.length(); i += 2)
{
    out += line.charAt(i);
}
System.out.println(out);

请注意,我将 2 添加到 i。所以它应该得到字符 0、2、4、6、8。

因此,它将导致 "Paiza"。

您可以通过字符串向后循环,然后添加字符串,或者使用 StringBuilder

    String line = "PXaeiTzVap";
    StringBuilder sb = new StringBuilder(line);
    for(int i = line.length() - 1; i > 0; i--){
        if( i%2 == 0 )
        {
           sb.delete(i-1, i);
        }   
    }
    System.out.println(sb);

这将打印出 Paizap

public String removeEveryOtherChar(String line) {
    String result = "";
    for (int i = 1; i < line.length(); i++) {
        if (i % 2 == 0) {
            result += String.valueOf(line.charAt(i));
        }
    }
    return result;
}

试试这个:

StringBuilder output = new StringBuilder(line.length()/2);
for(int i = 0; i < line.length(); i+= 2) {
    out.append(line.charAt(i));
}
System.out.println(output.toString());

您所要做的就是使用 for 循环遍历字符串的每个字符。对于每个字符,使用 Character.toLowerCase(char a) 方法转换为小写并与原始字符进行比较。如果它们不相等,则意味着该 char 必须是大写字母,因此必须将其删除。通过获取该 char 之前和该 char 之后所有字符的子字符串并添加子字符串以使用排除不需要字符的新字符串对象设置字符串来删除它。请务必执行 i--,因为字符串的大小会发生变化,并且您不想跳过现在位于刚删除的字符位置的字符。

for(int i = 0; i < str.length(); i++)
{
    if( Character.toLowerCase(str.charAt(i)) != str.charAt(i) )
    {
        str = str.substring(0,i) + str.substring(i+1);
        i--;
    }
}