无法替换字符串中的字母

时间:2011-02-17 23:18:53

标签: java

我已经就这个循环问了几个问题:

  String[] book = new String [ISBN_NUM];
  bookNum.replaceAll("-","");
  if (bookNum.length()!=ISBN_NUM)
    throw new ISBNException ("ISBN "+ bookNum + " must be 10 characters");
  for (int i=0;i<bookNum.length();i++)
  {
      if (Character.isDigit(bookNum.charAt(i)))
      book[j]=bookNum.charAt(i);  //this is the problem right here
      j++;
      if (book[9].isNotDigit()|| 
          book[9]!="x"        ||
          book[9]!="X")
      throw new ISBNException ("ISBN " + bookNum + " must contain all digits" + 
                               "or 'X' in the last position");
  }

将无法编译。我从另一个问题得到的答案告诉我,错误发生的行是错误的,因为bookNum.charAt(i)是一个(不可变的)字符串,我无法将这些值转换为书籍数组。我需要做的就是检查一个ISBN号(bookNum),看它是否都是数字,除了最后一位数字可以是'x'(有效的ISBN)。这是最好的方法吗?如果是这样,我到底做错了什么?如果不是,使用哪种方法会更好?

5 个答案:

答案 0 :(得分:6)

book的类型为String[](字符串数组),bookNum.charAt(i)返回char。您无法从String分配char

改为book[j] = String.valueOf(bookNum.charAt(i))

此外,您可能想要更改第一个错误:

throw new ISBNException ("ISBN "+ bookNum + " must be " + ISBN_NUM + " characters");

答案 1 :(得分:3)

book []数组包含字符串。

方法bookNum.charAt()返回一个char。

您不能将char分配给String数组的成员。

如果你想要一个字符串数组,可以考虑使用bookNum.substring(i,i + 1)。

答案 2 :(得分:2)

你做错了是你将book声明为String Array而不仅仅是String。

答案 3 :(得分:2)

问题在于:

String[] book = new String [ISBN_NUM];

您创建了一个String对象数组,但随后用chars:

来提供它
book[j]=bookNum.charAt(i);

只需像这样初始化数组:

char[] book = new char[ISBN_NUM];

此外,您应该删除与j相同的i变量。在检查for之前结束book[9]循环,否则您将获得NullPointerException

希望没有任何问题:)

答案 4 :(得分:1)

请参阅其他帖子中的my answer。 您基本上处理字符串数组,如字符串(或字符数组)。你的目标是什么?您只想验证bookNum是否是有效的ISBN,对吗?如果不是,那么行动方针是什么?如果你的目标是整个bookNum如果它是有效的并且如果不是则中止,我在另一个帖子中的答案应该给出关于可能更好的方法的提示。