从字符串初始值设定项“new byte [] {1,2,3}解析byte []”

时间:2013-12-04 02:50:39

标签: java arrays string initialization byte

嗨团队,首先我不想要一个由实际String / char []

制作的byte []数组
//NO!
String s = "abc";
byte[] bytes = s.getBytes();

我想要一个由String的内容和表示构造的byte []数组,就像这样。

byte[] b = "new byte[]{1,2,3}"
//Again I don't want >> byte[] b = new String("new byte[]{1,2,3}").getBytes();

感谢团队。

3 个答案:

答案 0 :(得分:0)

好吧,你总是可以遍历数组并将这些值放在一个字符串中,然后将它们放在一个字节数组中。

String d = "new byte[]{";
for(int i = 0; i < s.length() - 1; i++)
    d += s.charAt(i) +",";
d += s.charAt(s.length() - 1) + "}";

byte[] b = d.getBytes();

答案 1 :(得分:0)

这对我有用 -

/**
 * Parse a properly formatted String into a byte array.
 * 
 * @param in
 *          The string to parse - must be formatted
 *          "new byte[]{1,2,n}"
 * @return The byte array parsed from the input string.
 */
public static byte[] parseByteArrayFromString(
    String in) {
  in = (in != null) ? in.trim() : "";
  // Opening stanza.
  if (in.startsWith("new byte[]{")) {
    // Correct closing brace?
    if (in.endsWith("}")) {
      // substring the input.
      in = in.substring(11, in.length() - 1);
      // Create a list of Byte(s).
      List<Byte> al = new ArrayList<Byte>();
      // Tokenize the input.
      StringTokenizer st = new StringTokenizer(in,
          ",");
      while (st.hasMoreTokens()) {
        String token = st.nextToken();
        // Add a Byte.
        al.add(Byte.valueOf(token.trim()));
      }
      // Convert from the List to an Array.
      byte[] ret = new byte[al.size()];
      for (int i = 0; i < ret.length; i++) {
        ret[i] = al.get(i);
      }
      return ret;
    }
  }
  return new byte[] {};
}

public static void main(String[] args) {
  byte[] vals = parseByteArrayFromString("new byte[]{1,2,3}");
  System.out.println(Arrays.toString(vals));
}

答案 2 :(得分:0)

您可以使用正则表达式提取字节,例如:

Pattern pattern = Pattern.compile("(\\d+)");
Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
    Byte.parseByte(matcher.group(0)).byteValue(); // Use this
}

while循环中,使用可以将它们添加到数组中以便以后使用它或将其打印到控制台或其他任何地方。这取决于你。

为确保输入字符串正确,请添加另一个模式以在必要时检查该字符串。例如:

Pattern.compile("new byte\\[\\] ?\\{((\\d+),? *)+\\}");