格式化String.format数据

时间:2013-06-25 14:06:52

标签: java string formatting format concatenation

我有一个收集wifi和蜂窝数据使用的应用程序,并通过短信将其作为一串数据发送 - 但是我需要一些帮助来修改它发送的字符串到正确的格式

现在出现的方式:

USI;1;3056090866;06/16/58/06/24/13;CN25.48,WN86.957USI;CN34.931,WN16.656

我希望它以下列方式发送:(没有第二个USI)

USI;1;3056090866;06/16/58/06/24/13;CN25.48,WN86.957;CN34.931,WN16.656

如何实现这一目标? (我只想删除USI这个词的第二次出现,但我不确定如何使用String.format以编程方式删除数据)

CODE SNIPPET:

String info = String.format("USI%sCN%s,WN%s", tag + status + tag + mdn +tag + DToDevice + tag, mobileStr, totalStr + settings.getString("last_month", "0"));

3 个答案:

答案 0 :(得分:1)

info.replace("USI","")将删除"USI"的每个实例。做"USI" + info.replace("USI","")就足够了。

答案 1 :(得分:1)

替换不在字符串开头的第一个USI

String info = String.format(...);
info = info.replaceFirst("(?<=.)USI","");

替换第二个USI

String info = String.format(...);
info = info.replaceFirst("(?<=USI.{0,10000})USI","");

(或another solution也可能符合您的需求)

Test

您可以类似地使用replaceAll替换所有出现次数。

以上使用了正则表达式。

(?<=...)表示之前的字符必须与给定的模式匹配,在第一种情况下,是任何/通配符(.)。在第二种情况下,我们向后看,直到找到USI.{0,10000}表示0-10000张外卡(.*,这意味着零或多张外卡不起作用,因为后置需要最大长度)。

有关Java正则表达式的更多信息,请参阅this

答案 2 :(得分:0)

作为一种解决方法,您可以使用String.lastIndexOf找到后一个USI的位置,然后使用该位置使用String.substring将其拆分为两部分而不使用第二个USI。