在java中按自定义模式格式化字符串

时间:2013-12-31 15:47:43

标签: java apache-commons

我有String个实例包含1548258598784165等数字。 我想要一个灵活的实用程序来将此字符串格式化为另一个字符串 我的目标是遵循结果(样本):

  • 规则1:中间的三颗星 - 四个右数字 - 四个左数字。结果将是:1548***4165
  • 规则2:短划线字符,而不是除三个第一位数字和最后一位数字之外的任何字符。结果将是:154-----------65
  • 规则3:按任意四位数的空格分割。结果将是:1548 2585 9878 4165

以上规则是我的格式化原始字符串规则的示例。 我的问题是:我的目标是否有利益效用?我不希望以substring和类似的方式进行操纵。

2 个答案:

答案 0 :(得分:1)

我相信这符合您的要求

public static String customFormat(String in, int i) {
    StringBuilder sb = new StringBuilder();
    if (in != null) {
        char[] arr = in.toCharArray();
        switch (i) {
        case 1:
            for (int t = 0; t < 4; t++) {
                sb.append(arr[t]);
            }
            sb.append("***");
            for (int t = arr.length - 4; t < arr.length; t++) {
                sb.append(arr[t]);
            }
            break;
        case 2:
            for (int t = 0; t < 3; t++) {
                sb.append(arr[t]);
            }
            for (int t = 3; t < arr.length - 2; t++) {
                sb.append("-");
            }
            for (int t = arr.length - 2; t < arr.length; t++) {
                sb.append(arr[t]);
            }
            break;
        default:
            for (int t = 0; t < arr.length; t++) {
                if (t > 0 && t % 4 == 0) {
                    sb.append(" ");
                }
                sb.append(arr[t]);
            }
        }
    }
    return sb.toString();
}

public static void main(String args[]) throws IOException {
    for (int i = 1; i < 4; i++) {
        System.out.println(customFormat("1548258598784165", i));
    }
}

运行时输出

1548***4165
154-----------65
1548 2585 9878 4165

答案 1 :(得分:1)

如果你想以一种非常优雅的方式编写它,我相信创建一个新类是一个好主意,它将包含一个String和方法,以你想要的方式对该字符串进行操作。 String可以作为参数传递给Class的构造函数(然后在类中是私有的)。

当然,您可以创建一个包含方法的类来处理作为参数传递给方法的String,这可能是一种更通用的方式(因为您可以使用普通的字符串而不仅仅是对象你自己的类型。)

两种情况下的方法都可以基于标准的String类方法。您可以使用inputString.charAt(int index)从String中访问单个符号,这似乎是满足您大多数需求的简单解决方案。每个方法都可以返回一个新的String,该String使用源字符串中的字符和您希望它包含的其他符号构建。您需要实现的唯一事情是包装String类方法。