StringBuilder,用变量替换索引

时间:2014-11-22 11:19:27

标签: java replace stringbuilder

如何替换索引的特定索引?我尝试了StringBuilder,问题只是我想用变量替换索引:

  if (org == m2) {
    System.out.println(eingabe + " ist eine g\u00fcltige ISBN.");
  }
  else {

    if  (eingabe.length() ==13) {
        StringBuilder correct = new StringBuilder(eingabe);
        correct.setCharAt(13, m2);
        System.out.println(eingabe + " ist eine fehlerhafte ISBN. \nG\u00fcltig w\u00e4re " + correct);
    }
    else if (eingabe.length() ==18) {
        StringBuilder correct = new StringBuilder(eingabe);
        correct.setCharAt(18, m2);
        System.out.println(eingabe + " ist eine fehlerhafte ISBN. \nG\u00fcltig w\u00e4re " + correct);        
    }
  }

错误如下:

    isbn.java:36: error: method setCharAt in class AbstractStringBuilder cannot be applied to given types;
            correct.setCharAt(13, m2);
                   ^
  required: int,char
  found: int,int
  reason: actual argument int cannot be converted to char by method invocation conversion
isbn.java:41: error: method setCharAt in class AbstractStringBuilder cannot be applied to given types;
            correct.setCharAt(18, m2);
                   ^
  required: int,char
  found: int,int
  reason: actual argument int cannot be converted to char by method invocation conversion

1 个答案:

答案 0 :(得分:1)

你应该做

correct.setCharAt(13, (char)m2);

相反,因为setCharAt()的第二个参数应该是char类型。隐式转换仅适用于促销(从较窄类型到较宽类型的转换,例如从char - 2个字节 - 转换为int - 这是4个字节),但不是相反。在后一种情况下,你应该做一个这样的显式演员:(typeName) variableName

此外,如果您的原始String长度为13,则最后一个位置的索引将是12而不是13,因为位置从0开始编号,而不是从1开始编号。因此,您对替换最后一个符号的调用应该是:

correct.setCharAt(12, (char)m2);

在第一种情况下,类似地在第二种情况下。

希望有所帮助!