我正在尝试从字符串中修剪前导空格,并且我不知道我的方法有什么问题,任何建议将不胜感激?

代码:
this.poNumber = poNumber.equals("") ? poNumber : poNumber.trim();
我正在从csv文件中读取poNumber为“IG078565和IG083060”,并且输出也获得相同的空白值,不确定为什么吗?

更新了

添加完整的方法以获得更好的上下文:

public BillingDTO(String currency, String migrationId, String chargeId, String priceId, String poNumber, String otc,
            String billingClassId, String laborOnly) {
        super();
        this.currency = currency.equals("") ? currency : currency.trim();
        this.migrationId = migrationId.equals("") ? migrationId : migrationId.trim();
        this.chargeId = chargeId.equals("") ? chargeId : chargeId.trim();
        this.priceId = priceId.equals("") ? priceId : priceId.trim();
        this.poNumber = poNumber.equals("") ? poNumber : poNumber.trim();
            //poNumber.trim();
        //System.out.println("poNumber:"+this.poNumber.trim());
        //this.poNumber = poNumber.equals("") ? poNumber : poNumber.trim();
        this.otc = otc.equals("") ? otc : otc.trim();
        this.billingClassId = billingClassId.equals("") ? billingClassId : billingClassId.trim();
        this.laborOnly = laborOnly.equals("") ? "N" : laborOnly;
    }

谢谢。

最佳答案

更新看来您的空格不是空格(ascii = 32)。您的代码为160,这是一个不间断的空格。 trim()不处理它。因此,您必须执行以下操作:

this.poNumber = poNumber.replace(String.valueOf((char) 160), " ").trim();

您最好创建一个实用程序-YourStringUtils.trim(string),然后执行两个操作-.trim()replace(..)
原答案:

只需使用this.poNumber = poNumber.trim();
如果poNumber可能是null,则可以使用commons-lang中的空安全this.poNumber = StringUtils.trim(poNumber);

如果要将trimToEmpty(..)转换为空字符串,也可以使用同一类的null

如果您不想依赖commons-lang,则只需添加一个if子句:
if (poNumber != null) {
    this.poNumber = poNumber.trim();
}

如问题下的注释中所述-确保修剪后检查正确的变量。您应该检查实例变量。因为字符串是不可变的,所以您的参数(或本地变量,我不能说)不会改变。

07-24 09:25