删除java中字符前后的字符

时间:2017-11-17 04:35:24

标签: java string

我需要使用java编程删除特定字符前后的所有字符 例如:

输入 ab*cd 输出 ad

输入 ab**cd 输出 ad

import java.util.Scanner;

public class Starstring {
    public static void main(String[] args) {
        String str1;
        String res="";
        int n,i=0;

        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the string");
        str1=sc.next();
        res=str1;
        StringBuffer a = new StringBuffer(str1);
        n=str1.length()-1;
        for(i=0;i<n;i++)
        {
            if(str1.charAt(i)=='*')
            {
                res=a.delete(i-1, i+2).toString();
            }
        }
        System.out.println("The final string is"+res);
    }

}

我得到case 1的预期输出,但是case 2错误的输出以ac作为输出。我不知道我哪里出错了。有人请帮帮我。谢谢你提前:)

6 个答案:

答案 0 :(得分:0)

您可以使用正则表达式替换字符串中的字符组。在&amp;之前删除*和1个字符在它之后:

Pattern pt = Pattern.compile(".\\*+."); 
Matcher match = pt.matcher(input);
String output = match.replaceAll("");
//System.out.println(output);

答案 1 :(得分:0)

使用正则表达式将多个*替换为单个*。您的代码如下所示:

input:ab*cd output:ad
input ab**cd  ouput:ad
import java.util.Scanner;

public class Starstring {
    public static void main(String[] args) {
        String str1;
        String res="";
        int n,i=0;

        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the string");
        str1=sc.next();
        res=str1;
        str1 = str1.replaceAll("[*]+", "*");// add this line
        StringBuffer a = new StringBuffer(str1);
        n=str1.length()-1;
        for(i=0;i<n;i++)
        {
            if(str1.charAt(i)=='*')
            {
                res=a.delete(i-1, i+2).toString();
            }
        }
        System.out.println("The final string is"+res);
    }

}

答案 2 :(得分:0)

你可以这样做:

    String str1;
    int n;

    Scanner sc=new Scanner(System.in);
    System.out.println("Enter the string");
    str1=sc.next();

    sc.close();

    StringBuffer a = new StringBuffer(str1);
    n=a.length();
    for(int i=0;i<n;i++)
    {
        if(str1.charAt(i)=='*')
        {
            int aa = i-1;
            int bb = i+1;
            for(;bb<n; bb++){
                if(str1.charAt(bb)!='*'){
                    break;
                }
            }
            a.delete( aa, bb+1 );
            i = bb;

        }
    }
    String res = a.toString();
    System.out.println("The final string is"+res);

但更好的java 正则表达式 方式是:

从扫描仪读取值后 -

    String res2 = str1.replaceAll( ".[\\*]+.", "" );
    System.out.println("The final string is"+res2);

答案 3 :(得分:0)

使用@Vasan正则表达式..下面是代码。

public static void main(String[] args) {
        String str1;
        String res="";
        int n;

        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the string");
        str1=sc.next();
        res=str1;
        StringBuffer a = new StringBuffer(str1);
        n=str1.length()-1;

        String[] splitVal = str1.split(".\\*+.");
        String newString ="";
        for(int i=0; i<splitVal.length; i++){
            newString = newString + splitVal[i];
        }

        System.out.println("The final string is "+newString);
    }

希望你明白。

答案 4 :(得分:0)

试试这个:

public static void main(String[] args) {
    System.out.println("Enter the string");
    Scanner sc = new Scanner(System.in);
    String str1 = sc.nextLine();
    String[] separated = str1.split(".\\*+.");
    String result = "";
    for(String str : separated) {
        result += str;
    }
    System.out.println(result);
}

答案 5 :(得分:0)

如果输入为:* abc *或ab * c * de