(Java)将符号串转换为单个数字整数数组

时间:2016-09-14 13:56:00

标签: java parsing processing

我正在尝试使用一个字符串,即$!#,将每个单独的符号转换为其对应的ASCII值,此处为36, 33, 35,然后以每个单个数字的整数数组结束存储在单独的索引中,意思是3, 6, 3, 3, 3, 5

简而言之:从$!#$,!,#36, 33, 353, 6, 3, 3, 3, 5

由于我正在使用Processing(Java的包装器),到目前为止,我的SO研究得到了我:

String str = "$!#";
byte[] b = str.getBytes();

for (int i=0; i<b.length; i++){
 println(b[i]); 
}

我最终得到的是ASCII值。字节数组b包含[36, 33, 35]

现在如果那些是字符串而不是字节,我会使用String.valueOf(b)来获取363335,然后将整个事物再次拆分成单个数字整数数组。

我想知道这种方法是否不必要地复杂化,并且可以通过较少的转换步骤来完成。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

老实说,如果我是你,我不会过分担心效率&#34;直到你遇到实际问题。编写您理解的代码。如果您对效率有疑问,您必须准确定义您的意思:它采取了太多步骤吗?这花了太长时间?输入的大小是多少?

请注意,您概述的方法和下面的方法都是O(N),这可能是您最好的。

如果你在O(N)中有一个特定的瓶颈,那么你应该做一些分析来找出它的位置。但是,你不应该仅仅因为你感觉到并且感觉不到微优化(或者颤抖过早优化)。喜欢的东西是效率低下的#34;。

引用this answer

  

...在没有测量性能问题的情况下,您不应该进行优化,因为您认为您将获得性能提升。

如果我是你,我会使用charAt()函数获取char中的每个String,然后使用int()函数转换char 1}}成int。然后,您可以将这些int值添加到String(或者更好,StringBuilder):

String str = "$!#";

StringBuilder digits = new StringBuilder();
for (int i=0; i<str.length(); i++) {
  int c = int(str.charAt(i));
  digits.append(c);
}

然后你可以使用split()函数将它们分成单个数字:

String[] digitArray = digits.toString().split("");
for (String d : digitArray) {
  println(d);
}

打印:

3
6
3
3
3
5

有很多不同的方法可以执行此操作:例如,您可以使用toCharArray()函数代替charAt()。但这些都不会或多或少地变得有效&#34;直到你准确定义效率的含义。

答案 1 :(得分:0)

Java 8流解决方案:

int[] digits = "$!#".chars()
                    .mapToObj(Integer::toString)
                    .flatMapToInt(CharSequence::chars)
                    .map(c -> c - '0')
                    .toArray();
System.out.println(Arrays.toString(digits)); // prints [3, 6, 3, 3, 3, 5]

答案 2 :(得分:0)

一种解决方案可能就是做那样的事情

// Create an array of int of a size 3 * str.length()

for(int i = 0; i < str.length(); i++)
{
  int n = (int) str.charAt(i);
  int a = n / 100;
  int b = (n - (a * 100)) / 10;
  int c = n - (a * 100) - (b * 10);

  // push a, b and c in your array (chose the order and if you want
  // to add the potential 0's or not)
}

但正如其他人之前所说,我不确定是否值得这样玩。这取决于我的应用程序。