如何遍历字符串数组中的所有字符

How to loop over all characters in a String array

我正在做一个哈希 Table 项目。所以我有一个数组来保存字符串。 ArrayList<String> buckets = new ArrayList<>();

我想创建一个方法 hash,但我一直在思考如何让该方法接受一个字符串并遍历该字符串中的各个字符并将它们的数值加在一起,然后 return整数和。

方法hash将用于下面的测试:

@Test
public void testToString() {
    HashTable h=   new HashTable(10);

    org.junit.Assert.assertEquals( "Empty hash output" ,
             "(0)\t\n"
            +"(1)\t\n"
            +"(2)\t\n"
            +"(3)\t\n"
            +"(4)\t\n"
            +"(5)\t\n"
            +"(6)\t\n"
            +"(7)\t\n"
            +"(8)\t\n"
            +"(9)\t\n"

            , h+""/*.toString()*/
            );
}

@Test
public void hashFunction() {
    HashTable h=   new HashTable(10);

    org.junit.Assert.assertEquals( "hash function test" , 
            4
            , h.hash("abc") % h.size()
            );
    org.junit.Assert.assertEquals( "hash function test backwards string" , 
            4
            , h.hash("cba") % h.size()
            );

在此先感谢您!

有几种方法可以做到这一点 - 例如,您可以使用 charAt(i)for 循环:

int sum = 0;
for (int i = 0 ; i != s.length() ; i++) {
    sum += s.charAt(i);
}

您也可以将字符串转换为字符数组,并在 for (char ch : s.toCharArray()) 语句中使用它,但这会导致为字符数组分配额外的内存。

注1:你应该注意数字溢出。

注 2:考虑使用不同的方法计算哈希值。添加字符代码会起作用,但具有重新排序字符的字符串将具有相同的哈希代码。