0

我正在开发一个通过蓝牙与 PCB 通信的应用程序。我从应用程序发送到 PCB HEX 字符串,如下所示:

hex_string = 2b0509045af2ff1f5230a9072b

好吧,在这个字符串中,这些值总是相同的2b050904,而其他的则代表5af2ff1f内存位置、5230a907变量值和2b校验和。

2b开头的 代表,thread init所以基本上我需要检查2b字符串中的 other,因为如果有另一个,PCB 会将其理解为另一个线程 init 并将拆分整个字符串。

所以步骤是:

* Disregarding the 2b at the start, check for another 2b inside the string, and if it is,
  duplicate it, so the PCB understands it this way.
* Afther duplicating the 2b, change the 09 in the non variable part of the string, 
  that indicates the string's byte length, with a 0a.

在此线程中讨论后:检查字符串中的特定值

这是我用来实现此目的的功能:

public static String manage2b (String s) {
    String sNew = null;
    String input = null;

    if (s.contains("2b")) {
        sNew = s.replaceFirst("2b", "");
    }
    if (sNew.contains("2b")) {
        input = convertString(s);
        input = replaceSize(input, "0a");
    }
    else {
        input = s;
    }
    return input;
}
/**Changes the 09 for 0a as the string's byte length if there is a duplicated "2b"*/
private static String replaceSize (String input, String newSizeVal) {
    int sizePosition = 4;
    return input.substring(0, sizePosition) + newSizeVal + input.substring(sizePosition + newSizeVal.length(), input.length());
}
/**Duplicates the "2b" if there is another inside the string*/
public static String convertString (String input) {
    String find2b = "2B";

    int firstIndex = input.indexOf(find2b) + find2b.length();
    return input.substring(0, firstIndex) + input.substring(firstIndex, input.length()).replace(find2b, "2B2B");
}

我已经用调试器检查了这个函数,并且使用了一个与示例非常相似的字符串,它使从09to的更改正确0a,但它不会复制2b. 所以,我认为在执行此操作的步骤中,也许我声明了一些错误,或者我在某个地方犯了错误。

4

3 回答 3

0

此外,您是否只需要检查一个重复出现的“2b”还是可能有多个?while(s.contains("2b") || s.contains("2B"))

可以帮助你。

至于区分大小写:

org.apache.commons.lang3.StringUtils.containsIgnoreCase("ABCDEFGHIJKLMNOP", "gHi");

可以帮助你,所以:

导入 org.apache.commons.lang3.StringUtils;...

while ( StringUtils.containsIgnoreCase(s, "2b")) ...

应该解决这个问题。

于 2013-09-18T08:51:11.273 回答
0

是的......“2b”与“2B”不同......改变它......我认为它会在那之后工作......(我不允许评论......对不起......)

于 2013-09-18T08:07:06.547 回答
0

如果 String 不寻找大小写匹配,这似乎是正确的。

于 2013-09-18T08:13:38.753 回答