我正在尝试获取一个字符串,即 $!#
,将每个单独的符号转换为其相应的 ASCII 值,这里是 36, 33, 35
和然后最终得到一个整数数组,每个数字存储在单独的索引中,即 3, 6, 3, 3, 3, 5
。
简而言之:从 $!#
到 $,!,#
到 36, 33, 35
到 3, 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
,然后将整个内容再次拆分为单个数字整数数组。
我想知道这种方法是否不必要地复杂,并且可以通过更少的转换步骤来完成。有什么建议吗?
最佳答案
老实说,如果我是你,在你遇到实际问题之前我不会太担心“效率”。编写您理解的代码。如果您遇到效率问题,则必须准确定义您的意思:是否采取了太多步骤?是不是时间太长了?您输入的大小是多少?
请注意,您概述的方法和下面的方法都是 O(N),这可能是您能得到的最好的方法。
如果您在 O(N) 内有一个特定的瓶颈,那么您应该进行一些分析来找出它在哪里。但您不应该仅仅因为您“感觉”某些东西“效率低下”而费心进行微优化(或不寒而栗过早的优化)。
引自this answer :
...in the absence of measured performance issues you shouldn't optimize because you think you will get a performance gain.
如果我是你,我只会使用 charAt()
函数来获取 String
中的每个 char
,然后使用int()
函数将 char
转换为 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()
。但是,除非您准确定义效率的含义,否则这一切都不会变得更加“高效”。
关于java - (Java) 将符号字符串转换为单位数字整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492320/