繁体   English   中英

在Java中替换半冒号(;)字符

[英]Replace semi colon (;) character in java


我正在尝试使用此方法从字符串的两端截断半冒号:

private String truncateSemicolon(String inputString){
    String outputString=inputString;
    boolean isTruncated = false;
    Log.i(TAG, "*************I N P U T   T O  T R U N C A T E ************* "+outputString);
    while(!isTruncated){
        if(outputString.startsWith(";")){

            outputString=outputString.substring(1,outputString.length());
            Log.i(TAG, "START *************************************"+outputString);
        }
        if(outputString.endsWith(";")){

            outputString=outputString.substring(0,(outputString.length()-1));
            Log.i(TAG, "************************************* END"+outputString);
        }
        if(!outputString.endsWith(";") && !outputString.startsWith(";")){
            isTruncated=true;
        }
    }       
    Log.i(TAG, "*************O U T P U T   T O  T R U N C A T E ************* "+outputString);
    return outputString;
}

但这只是从一开始就被截断了。
问题是什么??

您的代码是正确的

此代码仅删除第一个“;” 最后一个“;” 是对的?

如果最后一个“;”不能删除 下一个空格有ex(“;”)

如果你不想忽略空间

使用trim()方法

您的代码工作正常,只需执行一个简单的步骤即可:

String outputString=inputString.trim();

您的密码是正确的! 之后您可能会得到空白; 在你的字符串中

为了避免使用trim()

对于这种情况,请尝试

if (outputString.trim().endsWith(";")) {
    outputString = outputString.substring(0,(outputString.trim().length() - 1));
    Log.i(TAG, "*************O U T P U T   T O  T R U N C A T E ************* "+outputString);
}

删除分号';'的更好方法 从您的字符串是使用String.replaceAll()

字符串替换的字符串= inputString.replaceAll(“ ^; | $;”,“”);

试试这行可能会让你开心

String outputString=inputString.replace(";","");
    if(outputString.startsWith(";")){

        outputString=outputString.substring(1,outputString.length());
        Log.i(TAG, "START *************************************"+outputString);
    }
    if(outputString.endsWith(";")){

        outputString=outputString.substring(0,(outputString.length()-1));
        Log.i(TAG, "************************************* END"+outputString);
    }

对于public String substring(int beginIndex, int endIndex) beginIndex是开始索引(包括端点),endIndex是结束索引(不包括端点)。

因此更改outputString=outputString.substring(1,(outputString.length())); outputString=outputString.substring(1,(outputString.length() - 1));

同样,第二个if语句也会发生变化

outputString=outputString.substring(0,(outputString.length()-1));

outputString=outputString.substring(0,(outputString.length()-2));

所以你的代码应该是

    if(outputString.startsWith(";")){

        outputString=outputString.substring(1,outputString.length()-1);
        Log.i(TAG, "START *************************************"+outputString);
    }
    if(outputString.endsWith(";")){

        outputString=outputString.substring(0,(outputString.length()-2));
        Log.i(TAG, "************************************* END"+outputString);
    }

您的代码已正确运行。 仅执行一次子字符串将使函数更有效。

private String truncateSemicolon(final String inputString) {
    int startPos = inputString.startsWith(";") ? 1 : 0;
    if(inputString.endsWith(";")) {
        return inputString.substring(startPos, inputString.length() - 1);
    } else {
        return startPos == 0 ? inputString : inputString.substring(startPos);
    }
}

实现此目的的多种方法

String yourDesiredText= anytext.replaceAll(";$", "");

OR

yourDesiredText= yourDesiredText.replaceAll(";$", "");

OR

if (yourDesiredText.endsWith(";")) {
    yourDesiredText= yourDesiredText.substring(0, yourDesiredText.length() - 1);
}

字符串是不可变的。 这意味着您无法更改它们。

因此,您必须重新分配文本或将其设置为新变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM