检查字符串中的特定值

时间:2013-09-17 09:45:31

标签: java android string bluetooth

已更新

在我的应用程序中,我通过蓝牙与PCB进行连续通信。此通信由HEX Strings制作。

字符串格式如下:

2b(thread init), 05(write command), 09(bytes), 04(variable bytes), 5af2ff1f(memory location), 04a0bcf1(variable value), 7e(checksum)

此Hex字符串的功能是访问PCB的具体存储位置并写入值。

为了更容易,我们假设Hex字符串是:

hex_string= 2B05A82BF1

这个字符串,在通过蓝牙发送之前,我将其转换为字节[]。我需要的是创建一个检查我发送的所有字符串的函数。

我必须寻找的是字符串中的任何“2B”字节。这是因为PCB将“2b”读作“初始线程”值,如果字符串中有任何“2b”,则PCB会将其读作另一个线程的init,并且不会完全发送该字符串。

我不知道使用Hex String或将其转换为Byte []后是否更容易检查。

该函数将取消字符串的第一个“2b”并检查字符串中是否有另一个“2b”,如果是,则复制它,从而产生此结果。

before: hex_string= 2B05A82BF1
after: hex_string= 2B05A82B2BF1

这样PCB就可以理解“2b”不是初始线程值。

我想要做的是检查所有字符串中包含“2b”值的函数。但我不知道使用Hex字符串,转换为byte [] ...或者......以及如何执行此操作时更好。

4 个答案:

答案 0 :(得分:1)

这是你要找的?不确定......

  

输入:2BXX09XX2BYYYY输出:2BXX0AXX2B2BYYYY

public class Temp {

    public static void main (String args[]) {
        String input = convertSting("2BXX09XX2BYYYY");
        input = replaceSize(input, "0A");

        System.out.println(input);
    }

    private static String replaceSize(String input, String newSizeVal) {
        int sizePosition = 4;
        return input.substring(0, sizePosition) + newSizeVal + input.substring(sizePosition + newSizeVal.length(), input.length());
    }

    public static String convertSting (String input) {
        String findString = "2B";

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

答案 1 :(得分:1)

public static void main(String[] args) 
{       
 String str = "2B05A82BF1";
 String strNew = "";
 if (str.contains("2B")) 
{

strNew = str.replaceFirst("2B", "");
        }

  int index = 0;
   if (strNew.contains("2B")) 
{

index = strNew.indexOf("2B");
        }

    strNew = str.substring(0, index + 4);
            strNew = strNew + "2B" + str.substring(index + 4);
            System.out.println(strNew);

String tempStr = strNew.substring(2,4);

    int i= Integer.parseInt(tempStr);
    //System.out.println(i);
    i=i+1;
    if(i<10)
    {
        strNew=strNew.replace(tempStr, "0"+ String.valueOf(i));
    }
    else
    {
        strNew=strNew.replace(tempStr, String.valueOf(i));
    }


    System.out.println(strNew);

        }

答案 2 :(得分:1)

如果您正在使用字符串并在一个字节中转换相关数字中的每对字符(例如2b0a10将在[43, 10, 16]中进行转换),我认为更容易检查字节数组比字符串一:你只需要搜索数字43并插入另一个。  我使用ArrayList添加每个字节值,每次找到值时插入值43(0X2B)两次,然后将值放入普通array

检查字符串比较复杂,因为你必须考虑到2b02b0实际上是2b,02,b0,那里没有'2b'值。

示例:

public class Example {

    public static byte[] parseOutput(byte[] output) {
        ArrayList<Byte> aux= new ArrayList<Byte>();
        aux.add(output[0]); //we know the first value is 2b
        for (int i=1;i< output.length;i++) {
            aux.add(output[i]);
            if (output[i]==0x2b) {
                aux.add(output[i]); //added twice
            }
        }
        //we cannot use toArray because autoboxing does not work 
        byte[] result= new byte[aux.size()];
        for (int i=1;i< aux.size();i++) {
            result[i]=aux.get(i);
        }
        return result;
    }

    public static void main(String[] args) {

        byte[] b={43,11,11,43,15};

        byte[] result=parseOutput(b);
        for (byte data: result) {
            System.out.print(Integer.toHexString(data)+" "); // shows "0 b b 2b 2b f" 
        }

    }
}

答案 3 :(得分:0)

好吧,你的电话何时检查'2B'。找出在找到'2B'后你可以在哪里做某事。如果您决定在java中检查“2b”,可以通过

进行检查
String result = "2B0509045AF2FF1F04A0BCF17E";
if(result.contains("2B"))
{
    //do something
}
else
{
    //do something else
}