我是Java的新手,目前正在处理实现数组的代码。
Scanner sc= new Scanner(System.in);
String str=sc.nextLine();
int count[]= new int[25];
int len = str.length();
// Initialize count array index
for (int i = 0; i < len; i++)
{count[str.charAt(i)]++; } //This line is the issue.
我想知道charAt()是否返回char值,然后count [](整数数组)如何存储它,如果是,那么如何存储。 我已从此链接中提取了源代码enter link description here
谢谢。
答案 0 :(得分:0)
在this question处的答案深入探讨了允许从char
到int
的转换以及原因。
为了给您的情况一个简单的答案,char
将基于其ASCII Value转换为int
。
例如,如果字符为“ A”,则将其转换为65,将“ B”转换为66,依此类推。每个字符都有一个关联的整数代码,您可以在ASCII Table
之类的网站上在线检查该整数代码答案 1 :(得分:0)
如果需要在字符串中存储每个图表的数字表示形式,可以执行以下操作:
int[] nums = new int[length];
for(int i = 0; i < length; i++){
char character = testStr.charAt(i);
nums[i] = Character.getNumericValue(character);
}
祝您编程愉快!
答案 2 :(得分:0)
地图不是数组。数组的数字索引从0开始,并且您尝试使用字符值作为索引...
所以您有2条可能的路径:
Map<char, int>
,该字符将由字符本地索引-但是,首次遇到字符时,您必须注意将值设置为1。优点:接受非字母字符,缺点:处理更复杂Character.getNumericValue
是一个很好的星形标记,因为它会映射[10-36 [范围内的所有字母-顺便说一下,您需要一个大小为 26 而不是25 您的代码可能会变成:
Scanner sc= new Scanner(System.in);
String str=sc.nextLine();
int count[]= new int[26];
int len = str.length();
// Initialize count array index
for (int i = 0; i < len; i++) {
val = Character.getNumericValue(str.charAt(i)) - 10;
if (val >= 0) { // ok we have an alpha character
count[val]++;
}
}
答案 3 :(得分:0)
如果输入超出ASCII范围,则此字符计数方法将无法正常工作。这是使用地图和流在完整Unicode范围(包括大于2 16 的代码点)上完成相同工作的一种优雅方法:
import java.util.Map;
import java.util.stream.Collectors;
public class Counter {
public static void main(String [] args) {
String input = "geeksforgeeks \uD83D\uDE02";
Map<String, Integer> countMap = input.codePoints()
.mapToObj(codePoint -> new String(Character.toChars(codePoint)))
.collect(Collectors.toMap(c -> c, c -> 1, (n1, n2) -> n1 + n2));
System.out.println(countMap);
}
}
输出为
geeksforgeeks
{= 1,r = 1,s = 2,e = 4,f = 1,g = 2,k = 2,= 1,o = 1}
请注意,此特殊的“绘图”由2个字符组成。它的codePoint(十六进制)是D8 3D DE 02,并被命名为“ FACE WITH TEARS OF JOY”。
如果现在通过将input.codePoints()
替换为input.chars()
来运行同一程序,则会得到以下错误结果:
geeksforgeeks
{= 1,?= 1,r = 1,s = 2,e = 4,f = 1,g = 2,k = 2,?= 1,o = 1}
特别感谢Xah Lee