【问题标题】:Split a Hex String without spaces and flip it拆分没有空格的十六进制字符串并翻转它
【发布时间】:2013-09-16 13:28:08
【问题描述】:

我需要像这样拆分一个字符串:

String= 0C46BA09

我知道 StringTokenizer 和 String.split() 方法,我已经用它们来用空格分割字符串。

但在这种情况下,我没有将空格设置为条件,所以...我如何拆分这个字符串以逐个获取每个字符?

已编辑

这样做的真正目的是反转这个 HEX 字符串,所以这个 0C46BA09 得到这个 09BA460C

所以,我想知道是否有一种简单的方法可以做到这一点,或者 split() 方法是唯一的方法。

已编辑 2

最后一个问题的新链接:

Flip a Hex String

【问题讨论】:

  • 对数字量进行运算的真正“真正”目的是什么,但您为了方便而使用字符串?
  • 我需要先对 int 值进行操作,然后将它们转换为 Hex,为此我使用字符串
  • 但是最后你需要什么;一个整数?
  • @masmic_87 您的新要求非常有趣,但最好在新问题中提出,并清楚地描述数值要求
  • 十六进制格式的字符串

标签: java android string split


【解决方案1】:

你可以的

char[] charArray = "0C46BA09".toCharArray();

【讨论】:

  • 假设我这样做是为了摆脱字符串46BA。每个都将在charArray[x]。然后我想在其他字符串中再次添加这 4 个。但是我遇到了转换错误。所以我想我必须将它们添加到一个字符中并将从字符转换为字符串。我对这个字符串0C46BA09 所做的真正重要的事情是将顺序更改为这个09BA460C,因为这个字符串是一个十六进制字符串,所以也许有一个最简单的方法。
  • @Tarsem That won't work StringBuilder 将反转所有字符而不是字符对
  • 几乎有@Tarsem,但也许我忘了评论那是一个十六进制字符串,所以这种转换不能满足我的要求
  • 那么,有没有更简单的方法可以做到这一点?我不是在问这个,因为我很懒xD。只想学着做正确的事
【解决方案2】:

对字符串使用 for each 和 toCharArray() 方法

for (Character c : s.toCharArray()) {
        System.out.println(c);
 }

O/P:

0
C
4
6
B
A
0
9

更新:

String s = "2B00FFEC";
StringBuilder  result = new StringBuilder();
for (int i = 0; i <=s.length()-2; i=i+2) {
    result.append(new StringBuilder(s.substring(i,i+2)).reverse());
 }
System.out.println(result.reverse().toString());   //op :ECFF002B

【讨论】:

  • @Bathsheba yes.add the output too.
  • 您确定有标准保证吗?你需要获得我即将给你的 +1...
  • @Bathsheba 确实 :)。guaranteed by a standard??A for 循环是什么意思?
  • @Suresh Atta;我被引导相信短形式 for 循环的元素顺序应该被视为任意的。所以我不知道,在第一次检查时,你如何保证订单。
  • @Bathsheba - for(.. : ...) 构造使用右侧结构的可迭代特性(在本例中为 char[] 数组)。保证按顺序运行
【解决方案3】:
String s = "0C46BA09";
s.split("");

这应该可以完成工作。结果将是{ "", "0", "C", "4", "6", "B", "A", "0", "9", "" }

【讨论】:

    【解决方案4】:

    纯数字答案(灵感来自转换字节顺序的习语);保存往返字符串

    n 是一个int

    int m = ((n>>24)&0xff) |       // byte 3 to byte 0
            ((n<<8)&0xff0000) |    // byte 1 to byte 2
            ((n>>8)&0xff00) |      // byte 2 to byte 1
            ((n<<24)&0xff000000);  // byte 0 to byte 3
    

    如果你真的需要十六进制,

    Integer.toHexString(m);
    

    【讨论】:

    【解决方案5】:

    你为什么不使用

    public String substring (int start, int end) 
    

    那么方法呢?

    YOURSTRING= YOURSTRING.substring(4,8) + YOURSTRING.substring(0,4);
    

    【讨论】:

      【解决方案6】:

      如果您的目标是反转十六进制字符串的顺序,那么这段代码可能会有所帮助。

      String s = "0C46BA09";
      
      long b = Long.parseLong(s, 16);
      long l;
      l += ((byte)b >> 0) << 24;
      l += ((byte)b >> 8) << 16;
      l += ((byte)b >> 16) << 8;
      l += ((byte)b >> 24) << 0;
      
      System.out.println(Long.toHexString(l));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多