【问题标题】:Can I change my string?我可以改变我的字符串吗?
【发布时间】:2016-02-11 03:50:11
【问题描述】:

我有一个ArrayList 填充了表单中的字符串:

Name - (###)###-####
or
Name - ##########

我想将其保留在没有名称或连字符的表单中:

##########

我做了以下事情:

for (String number : contactArrayList) {
    number = number.replace("(", "");
    number = number.replace(")", "");
    number = number.replace(" ", "");
    number = number.replace ("+", "");
    number = number.replaceAll("\\D+", ""); //Remove non numeric values

    sendMessage(number, "SMS")
}

sendSMS方法:

private void sendSMS(String number, String message) {
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(number, null, message, null, null);
}

但这创建了我的字符串实例number 5 次(我知道是因为发送到该号码的任何消息都会发送 5 次)。有没有办法可以组合所有这些替换语句?

谢谢,

鲁基尔

【问题讨论】:

  • 你的最后一个替换有评论说Remove non numeric values,为什么不使用那个单一的替换?
  • 您提供的代码不应该创建一个字符串 5 次,也许还有其他事情发生。是否包含所有相关代码?
  • @JonnyHenly 嗯...你是对的。在按照您的建议进行操作后,它仍然会继续发送多条短信。我会更新我的问题。
  • 如果我没记错的话,sendMessage() 在 for 循环中。糟糕!
  • @RuchirBaronia 您想将电话号码(没有非数值)存储回ArrayList 或其他列表吗?您现在所做的没有多大意义,在遍历整个列表后,您实际上将number 设置为等于contactArrayList 中的最后一个条目。

标签: java android arrays string arraylist


【解决方案1】:

这很简单。它将替换所有非数字值:

for (String number : contactArrayList) {
    number = number.replaceAll("[^0-9]", ""); //Remove non numeric values
}

【讨论】:

  • @JonnyHenly:哦!我认为他认为由于五个替换语句,他有 5 个字符串,这就是为什么多次发送短信的原因?我不知道我只是在猜测。
  • 这根本不是你的错。是的,我也是这么想的。
【解决方案2】:

只需使用您的最终替换语句。其余的可以删除。

number = number.replaceAll("\\D+", ""); //Remove non numeric values

【讨论】:

    【解决方案3】:

    使用正则表达式。

    String str= "Name - (132)892-0121";
        str = str.replaceAll("[^\\d]*", "");
    

    由于您只需要数字,请从字符串中删除所有非数字。

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多