通过 2 个字符映射 char 数组 2
Mapping char array 2 by 2 character
我有一个像 XXYYXYXYXZXZXZXYXX 这样的字符数组,我想将它按两个字符映射到 LinkedHashMap,如下所示:
public LinkedHashMap<String, Integer> convert(char[] array) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
int[] freq = new int[array.length];
int i, j;
for (i = 0; i < array.length; i+=2) {
freq[i] = 1;
for (j = i + 2; j < array.length; j+=2) {
if (array[i] + array[i+1] == array[j] + array[j+1]) {
freq[i]++;
array[j] = '0'; //flag to check if it is already printed
array[j+1] = '0'; //flag to check if it is already printed
}
}
}
for (i = 0; i < freq.length; i+=2) {
if (array[i] + array[i+1] != ' ' && array[i] != '0') {
String dublex = ""+ array[i] + array[i+1];
hmap.put(dublex, freq[i]);
}
}
return hmap;
}
通常它应该输入以下值:
二十:2
洋洋:1
坐标:3
XZ: 3
但它分配了以下值:
二十:2
洋洋:4
坐标:3
肖战:?不可用
我对以下几行和几点表示怀疑:
1) 我尝试使用另一个循环值,如 "k" 用于计数 freq[] 变量,并尝试将其计数在 0-9 之间,因为 18 个元素是 9 个两个字符元素:我尝试这样做, 但没有意义并抛出异常。
2) “0”部分添加到值的末尾:我尝试添加单独的 0 值并单独检查,例如array[i] != '0' && array[i+1] != '0'
那么,如何解决这个问题?
public static LinkedHashMap<String, Integer> convert(char[] array) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
for (int i = 0; i < array.length - 1; i += 2) {
map.put(array[i] + "" + array[i + 1], map.getOrDefault(array[i] + "" + array[i + 1], 0) + 1);
}
return map;
}
public static void main(String[] args) {
System.out.println(convert("XXYYXYXYXZXZXZXYXX".toCharArray()));
}
,输出
{XX=2, YY=1, XY=3, XZ=3}
这只是 sc0der 的 的改写,应十六进制要求发布。
static Map<String, Integer> pairFreq(char[] array)
{
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
for(int i=0; i<array.length; i+=2)
{
String key = new String(array, i, 2);
map.put(key, 1 + map.getOrDefault(key, 0));
}
return map;
}
测试:
String str = "XXYYXYXYXZXZXZXYXX";
Map<String, Integer> map = pairFreq(str.toCharArray());
for(String pair : map.keySet())
System.out.println(pair + " : " + map.get(pair));
输出:
XX : 2
YY : 1
XY : 3
XZ : 3
我有一个像 XXYYXYXYXZXZXZXYXX 这样的字符数组,我想将它按两个字符映射到 LinkedHashMap,如下所示:
public LinkedHashMap<String, Integer> convert(char[] array) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
int[] freq = new int[array.length];
int i, j;
for (i = 0; i < array.length; i+=2) {
freq[i] = 1;
for (j = i + 2; j < array.length; j+=2) {
if (array[i] + array[i+1] == array[j] + array[j+1]) {
freq[i]++;
array[j] = '0'; //flag to check if it is already printed
array[j+1] = '0'; //flag to check if it is already printed
}
}
}
for (i = 0; i < freq.length; i+=2) {
if (array[i] + array[i+1] != ' ' && array[i] != '0') {
String dublex = ""+ array[i] + array[i+1];
hmap.put(dublex, freq[i]);
}
}
return hmap;
}
通常它应该输入以下值: 二十:2 洋洋:1 坐标:3 XZ: 3
但它分配了以下值: 二十:2 洋洋:4 坐标:3 肖战:?不可用
我对以下几行和几点表示怀疑:
1) 我尝试使用另一个循环值,如 "k" 用于计数 freq[] 变量,并尝试将其计数在 0-9 之间,因为 18 个元素是 9 个两个字符元素:我尝试这样做, 但没有意义并抛出异常。
2) “0”部分添加到值的末尾:我尝试添加单独的 0 值并单独检查,例如array[i] != '0' && array[i+1] != '0'
那么,如何解决这个问题?
public static LinkedHashMap<String, Integer> convert(char[] array) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
for (int i = 0; i < array.length - 1; i += 2) {
map.put(array[i] + "" + array[i + 1], map.getOrDefault(array[i] + "" + array[i + 1], 0) + 1);
}
return map;
}
public static void main(String[] args) {
System.out.println(convert("XXYYXYXYXZXZXZXYXX".toCharArray()));
}
,输出
{XX=2, YY=1, XY=3, XZ=3}
这只是 sc0der 的
static Map<String, Integer> pairFreq(char[] array)
{
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
for(int i=0; i<array.length; i+=2)
{
String key = new String(array, i, 2);
map.put(key, 1 + map.getOrDefault(key, 0));
}
return map;
}
测试:
String str = "XXYYXYXYXZXZXZXYXX";
Map<String, Integer> map = pairFreq(str.toCharArray());
for(String pair : map.keySet())
System.out.println(pair + " : " + map.get(pair));
输出:
XX : 2
YY : 1
XY : 3
XZ : 3