0

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

现在出现的样子:

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 以编程方式删除数据)

代码片段:

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

3 回答 3

1

info.replace("USI","")将删除"USI". 也许这样做就足够了"USI" + info.replace("USI","")

于 2013-06-25T14:12:43.070 回答
1

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

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

要替换第二个USI

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

(或其他可能也适合您需求的解决方案)

测试

您可以类似地使用replaceAll来替换所有匹配项。

上面使用了正则表达式。

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

有关Java 正则表达式的更多信息,请参阅此内容。

于 2013-06-25T14:41:39.987 回答
0

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

于 2013-06-25T14:15:11.240 回答