charAt用于确定唯一字符时

时间:2015-09-16 17:36:28

标签: java

我正在审查一个问题,即尝试确定字符串中的所有字符是否都是唯一的。这是算法

public static boolean unique(String s) {
    if(s.length() > 128) {
        return false;
    }
    boolean[] char_set = new boolean[256];
    for(int i = 0; i < s.length(); i++) {
        int val = s.charAt(i);
        System.out.println(i + ": " + val);
        if(char_set[val]) { // already found this char in string
            return false;
        }
        char_set[val] = true;
    }
    return true;
}

特别是,我的歧义来源是:

int val = s.charAt(i);

根据我的理解,ASCII字符有128个唯一字符。 s.charAt(i)只是返回ASCII字符串中字符的索引吗?

使用12310

的示例字符串

我为val获得了以下值:

0: 32
1: 49
2: 50
3: 51
4: 49

如果值3249等来自哪里,如果它不是ASCII字符串的char的索引,我完全感到困惑。

2 个答案:

答案 0 :(得分:1)

  

根据我的理解,ASCII字符有128个唯一字符。是   s.charAt(i)只返回字符内的索引   ASCII字符串?

nope,String#charAt返回指定索引处的char值。 Find more in documentation

32,49,...是char ascii值。

答案 1 :(得分:0)

您看到的是角色的ASCII值。在内存中,原始char和原始int之间没有区别。我对您的代码进行了一些小改动,使其更容易理解,并且可以进行演示测试。&#xA; @测试&#XA; public void testGetUnique(){&#xA;独特的(“12301”);&#xA;唯一的( “0123456789”);&#XA;唯一的( “abcdefghijklmnop”);&#XA;唯一的( “ABCDEFGHIJKLMNOP”);&#XA; }

&#xA;&#xA;
  public static boolean unique(String s){&#xA;的System.out.println(S);&#XA; if(s.length()&gt; 128){&#xA;返回false;&#xA; }&#XA; boolean [] char_set = new boolean [256];&#xA; for(int i = 0; i&lt; s.length(); i ++){&#xA; char c = s.charAt(i);&#xA; int val = c;&#xA; System.out.println(“i:”+ i +“c:”+ c +“”+ val);&#xA; }&#XA; return true;&#xA;}&#xA;  
&#xA;&#xA;

输出为&#xA; 1230

&#xA;&#xA;
  1&#xA; i:0 c:32&#xA; i:1 c:1 49&#xA; i:2 c:2 50&# xA; i:3 c:3 51&#xA; i:4 c:0 48&#xA; i:5 c:1 49&#xA; 0123456789&#xA; i:0 c:0 48&#xA; i:1 c :1 49&#xA; i:2 c:2 50&#xA; i:3 c:3 51&#xA; i:4 c:4 52&#xA; i:5 c:5 53&#xA; i:6 c :6 54&#xA; i:7 c:7 55&#xA; i:8 c:8 56&#xA; i:9 c:9 57&#xA; abcdefghijklmnop&#xA; i:0 c:a 97&#xA; i:1 c:b 98&#xA; i:2 c:c 99&#xA; i:3 c:d 100&#xA; i:4 c:e 101&#xA; i:5 c:f 102&#xA; i:6 c:g 103&#xA; i:7 c:h 104&#xA; i:8 c:i 105&#xA; i:9 c:j 106&#xA; i:10 c:k 107&#xA; i:11 c:l 108&#xA; i:12 c:m 109&#xA; i:13 c:n 110&#xA; i:14 c:o 111&#xA; i:15 c:p 112&#xA; ABCDEFGHIJKLMNOP&#xA; i:0 c:A 65&#xA; i:1 c:B 66&#xA; i:2 c:C 67&#xA; i:3 c:D 68&#xA; i:4 c:E 69&#xA; i:5 c:F 70&#xA; i:6 c:G 71&#xA; i:7 c:H 72&#xA; i:8 c:I 73&#xA; i:9 c:J 74&#xA; i:10 c:K 75&#xA; i:11 c:L 76&#xA; i:12 c:M 77&#xA; i:13 c:N 78&#xA; i:14 c:O 79&#xA; i:15 c:P 80&#xA;  
&#xA;&#xA;

因此空间为32,0为48,它增加1到57。 'A'是65,然后你在每个字母后加一个。 'a'是97,同样的交易。

&#xA;