我有一个收集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"));
答案 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也可能符合您的需求)
您可以类似地使用replaceAll
替换所有出现次数。
以上使用了正则表达式。
(?<=...)
表示之前的字符必须与给定的模式匹配,在第一种情况下,是任何/通配符(.
)。在第二种情况下,我们向后看,直到找到USI
。 .{0,10000}
表示0-10000张外卡(.*
,这意味着零或多张外卡不起作用,因为后置需要最大长度)。
有关Java正则表达式的更多信息,请参阅this。
答案 2 :(得分:0)
作为一种解决方法,您可以使用String.lastIndexOf找到后一个USI的位置,然后使用该位置使用String.substring将其拆分为两部分而不使用第二个USI。