检查字符串内部值的函数

时间:2013-09-18 07:55:04

标签: java android string multithreading bluetooth

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

hex_string = 2b0509045af2ff1f5230a9072b

好吧,在此字符串中,这些值始终相同2b050904,其他值代表5af2ff1f内存位置,5230a907变量值和2b校验和。

开头的2b代表thread init,所以基本上我需要检查字符串中的其他2b,因为如果有另一个,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.

在此主题中讨论后:Check for a especific value inside a string

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

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");
}

我已经使用调试器检查了该函数,并且字符串与示例的字符串非常相似,它正确地将09更改为0a,但它不会复制{ {1}}。所以,我认为在这样做的过程中,也许我宣布了一些错误,或者我在某个地方犯了错误。

3 个答案:

答案 0 :(得分:0)

是的......“2b”与“2B”不同......改变它......我认为它会在那之后起作用......(我不能发表评论......抱歉..)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

另外,你是否需要检查一个单独的“2b”或者可能有几个? while(s.contains(“2b”)|| s.contains(“2B”))

可以帮助你。

案例敏感度:

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

可以帮助你,所以:

import org.apache.commons.lang3.StringUtils; ...

while(StringUtils.containsIgnoreCase(s,“2b”))...

应该解决这个问题。