题解 | #表示数字#

表示数字

https://www.nowcoder.com/practice/637062df51674de8ba464e792d1a0ac6

没有用正则,直接苦力莽 ~

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int len = s.length();
        // 装结果字符串
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < len; i++) {
            char c = s.charAt(i);
            if(isNumer(c)) {
                // 先给前面拼一个星
                sb.append("*").append(c);
                // 设置一个开始往右边走
                int r = i + 1;
                /* 
				   判断 r 是否走到末尾,且 r 位置的字符是否是数字
                   如果是数字就继续拼,然后往前移动
                */
                while(r < len && isNumer(s.charAt(r))) {
                    sb.append(s.charAt(r));
                    r++;
                }
                // 直到退出循环,它不是一个数字了,再拼接一个星
                sb.append("*");
                /* 
				   注意这里,r 现在指向的是一个非数字位置,还没有拼接呢!
                   所以要把 i 设置成 r - 1 的位置,让其走到下面的 else 
                   里面把这个字符拼上去
                */ 
                i = r - 1;
            } else {
                sb.append(c);
            }
        }
        System.out.println(sb);
    }

    // 判断是否是数组
    public static boolean isNumer(char c) {
        return Character.isDigit(c);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
04-06 16:59
已编辑
河南工业大学 Java
牛牛牛的牛子:最好扔了,实在没有选择的选择
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务