字符串方法 -​​ 替换(oldChar,newChar)

时间:2017-03-01 14:03:03

标签: java

我必须根据用户输入的0,1,2,3,4,5,6,7,8,9的序列找到找到下一个最大数字的解决方案。

例如用户输入

  

5647382901

然后我的功能必须将其更改为

  

5647382910

我的下面的代码用临时字符K替换了我的最后2位数字,但是我需要它来替换最后一位数字。请让我知道我做错了什么?

import java.util.*;
public class NextLargest {
  int a = 100;
  public static void nextLargest(String a){
    long newNumber = Long.valueOf(a);
    int last = (int)(newNumber%10);
    int lastByOne = (int)(newNumber/10)%10;
    if(last > lastByOne){
        char k = a.charAt(a.length()-2); // 0
        a = a.replace(a.charAt(a.length()-2),a.charAt(a.length() -1) ); // 5647382911
        System.out.println(b); // 5647382911
        a = a.replace(a.charAt(a.length()-1),k);
        System.out.println(a);
    }
    System.out.println(a);

    System.out.println(last);
    System.out.println(lastByOne);
  }
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter the number");
    String number = scan.next();
    nextLargest(number);
}
}

1 个答案:

答案 0 :(得分:0)

替换方法的问题在于,它会使用您的新字符更改旧字符的所有出现,这就是为什么您无法使用此解决方案切换最后2位数字:

    long newNumber = Long.valueOf(a);
    int last = (int)(newNumber%10);
    int lastByOne = (int)(newNumber/10)%10;
    if(last > lastByOne){
        newNumber= newNumber - lastByOne*9  + last*9 ;

        }
    System.out.println("!!!!!!!!!!!!!!!! my final number :"+newNumber);
    a = String.valueOf(newNumber);
    System.out.println("!!!!!!!!!!!!!!!! my final number :"+a);

}