Java中的字符串方法:charAt()

时间:2013-12-06 01:15:48

标签: java

我有一项任务,我发现有点困难。我们正在读取外部文件以获取程序所需的数字,这不是问题。这是提示:

要检查代码的有效性,您需要分析代码中的每个数字,包括校验位。假设第一个数字位于零位,在偶数位置添加数字并将结果乘以3.将其加到奇数位数的总和。只有当总数是10的倍数时,UPC编号才有效。编写一个程序,从外部文件中读取UPC代码(作为字符串),分析代码,输出代码和标签“无效”或“有效”。

示例输出:UPC代码:

016499215511有效

372415613274无效

155512994610有效

011165459192无效

838241762110无效

到目前为止,我的代码中包含了以下内容:

import java.io.*;
import java.util.*;
public class Prog700d
{
    public static void main(String[] args) throws IOException
    {
        Scanner kbReader = new Scanner(new File("C:\\Users\\Guest\\Documents\\java programs\\Prog700d\\Prog700d.in"));
        while(kbReader.hasNextLine())
        {
            String upc = kbReader.nextLine();
            int length = upc.length();
            int a = upc.charAt(0);
            System.out.println(a);

我的主要问题是charAt()。我认为如果我使用charAt(),那么我将得到给定索引处的字符。所以我决定使用charAt(0)进行测试,最后我得到了这些数字:

49 55 53 49 51

我对如何得到这些数字感到困惑,老实说不知道出了什么问题。我可以完成程序的其余部分(例如公式,打印出所有内容等),但我不知道如何解决charAt()问题。我知道我可以处理剩下的任务,但我不知道这有什么问题。如果有人可以就如何解决问题提供一些指导,我们将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

这些数字是数字的UNICODE代码点。如果您需要获取数字值,请从中减去'0'

int a = upc.charAt(0) - '0';
System.out.println(a);

此表达式给出数字值的原因是UNICODE十进制数字代码点具有连续的整数值:'0'为48,'1'为49,'2'为50,并且等等。从代码点中减去'0'会产生数字的值。

编辑:从Java 1.5开始,您可以使用Character.digit获取相应数字的数值:

int a = Character.digit(upc.charAt(0), 10);
System.out.println(a);

答案 1 :(得分:0)

charAt返回char类型的值。

将您的代码更改为:

String upc = kbReader.nextLine();
int length = upc.length();
char a = upc.charAt(0);
int b = Character.getNumericValue(a);  
System.out.println(b);

应该那样。

答案 2 :(得分:0)

也许有点冗长,但......

% cat check.java
public class check {
    public static void main(String[] arg) {
        String s = arg[0];
        if (s.matches("[0-9]{12}")) {
            int evens = Character.digit(s.charAt(0),10) +
                        Character.digit(s.charAt(2),10) + 
                        Character.digit(s.charAt(4),10) + 
                        Character.digit(s.charAt(6),10) + 
                        Character.digit(s.charAt(8),10) + 
                        Character.digit(s.charAt(10),10);
            int odds = Character.digit(s.charAt(1),10) + 
                       Character.digit(s.charAt(3),10) + 
                       Character.digit(s.charAt(5),10) + 
                       Character.digit(s.charAt(7),10) + 
                       Character.digit(s.charAt(9),10) + 
                        Character.digit(s.charAt(11),10);
            int sum = evens * 3 + odds;
            if ((sum % 10) == 0) { System.out.println("YES"); return; }
        }
        System.out.println("NO"); 
    }
}
% javac check.java
% java -classpath . check 016499215511
YES
% java -classpath . check 372415613274
NO
% java -classpath . check 37241561327
NO
% java -classpath . check 01649921551
NO
%