java—从上一次迭代中拆分字符串

gab6jxml  于 2021-07-03  发布在  Java
关注(0)|答案(6)|浏览(304)

这篇文章是对这篇文章的更新:用regex获取字符串中的特定字符并删除未使用的零
首先,我想用正则表达式删除上次匹配中未使用的零。
我发现正则表达式对于我需要的东西来说有点过分了。
这是我现在想要的,
我想用 split() 方法
从中获得:

String myString = "2020-LI50532-3329-00100"

这是:

String data1 = "2020"
String data2 = "LI50532"
String data3 = "3329"
String data4 = "00100"

这样我就可以从最后一个 data 未使用的零
将“00100”转换为“100”
然后连接所有的数据得到这个

"2020-LI50532-3329-100"

我不熟悉分裂法,如果有人能告诉我这一点的话^^

iovurdzv

iovurdzv1#

您可以将最后一个字符串部分转换为整数类型,如下所示,以删除未使用的零:

String myString = "2020-LI50532-3329-00100";
String[] data = myString.split("-");
data[3] = data[3].substring(2);
StringBuilder sb = new StringBuilder();
sb.append(data[0] + "-" + data[1] + "-" + data[2] + "-" + Integer.parseInt(data[3]));
String result = sb.toString();
System.out.println(result);
mklgxw1f

mklgxw1f2#

您应该尽可能避免字符串操作,并依赖java语言中现有的类型。其中一种类型是整数。看起来您的代码由4部分组成-年(整数)-字符串-整数-整数。
因此,为了正确验证它,我将使用以下代码:

Scanner scan = new Scanner("2020-LI50532-3329-00100");

  scan.useDelimiter("-");

  Integer firstPart = scan.nextInt();
  String secondPart = scan.next();
  Integer thirdPart = scan.nextInt();
  Integer fourthPart = scan.nextInt();

或者类似于:

String str = "00100";
  int num = Integer.parseInt(str);
  System.out.println(num);

如果要重建原始值,可能应该使用numberformat来添加缺少的0。
要点是:
始终尝试重用您的语言中可用的现有代码和工具
始终尝试使用可用类型(localdate、integer、long)
创建自己的类型(类)并使用面向对象语言的表达能力

mwkjh3gx

mwkjh3gx3#

假设我们只想删除最后一个块的前导零,也许我们可以:
提取最后一个块
将其转换为整数并返回到字符串以删除前导零
用上述步骤中获得的字符串替换最后一个块
像这样:

public String removeLeadingZeroesFromLastBlock(String text) {
    int indexOfLastDelimiter = text.lastIndexOf('-');
    if (indexOfLastDelimiter >= 0) {
        String lastBlock = text.substring(indexOfLastDelimiter + 1);
        String lastBlockWithoutLeadingZeroes = String.valueOf(Integer.valueOf(lastBlock)); // will throw exception if last block is not an int

        return text.substring(0, indexOfLastDelimiter + 1).concat(lastBlockWithoutLeadingZeroes);
    }

    return text;
}
p1iqtdky

p1iqtdky4#

你可以用 substring 删除前导零的方法。。。

String myString = "2020-LI50532-3329-00100";

String[] data = myString.split("-");
data[3] = data[3].substring(2);

StringBuilder sb = new StringBuilder();
sb.append(data[0] + "-" + data[1] + "-" + data[2] + "-" + data[3]);

String result = sb.toString();

System.out.println(result);
ecfdbz9o

ecfdbz9o5#

使用regex的解决方案:

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(parse("2020-LI50532-3329-00100"));
        System.out.println(parse("2020-LI50532-3329-00001"));
        System.out.println(parse("2020-LI50532-03329-00100"));
        System.out.println(parse("2020-LI50532-03329-00001"));
    }

    static String parse(String str) {
        return str.replaceAll("0+(?=[1-9]\\d*$)", "");
    }
}

输出:

2020-LI50532-3329-100
2020-LI50532-3329-1
2020-LI50532-03329-100
2020-LI50532-03329-1

正则表达式的解释:
一个或多个零后跟一个非零数字,可以选择后跟任何数字,直到字符串结尾(由指定) $ ).

不使用regex的解决方案:

你也可以用 Integer.parseInt 它可以解析一个字符串 00100 进入 100 .

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(parse("2020-LI50532-3329-00100"));
        System.out.println(parse("2020-LI50532-3329-00001"));
        System.out.println(parse("2020-LI50532-03329-00100"));
        System.out.println(parse("2020-LI50532-03329-00001"));
    }

    static String parse(String str) {
        String[] parts = str.split("-");

        try {
            parts[parts.length - 1] = String.valueOf(Integer.parseInt(parts[parts.length - 1]));
        } catch (NumberFormatException e) {
            // Do nothing
        }

        return String.join("-", parts);
    }
}

输出:

2020-LI50532-3329-100
2020-LI50532-3329-1
2020-LI50532-03329-100
2020-LI50532-03329-1
7qhs6swi

7qhs6swi6#

public class Test {

    public static void main(String[] args) {
        System.out.println(trimLeadingZeroesFromLastPart("2020-LI50532-03329-00100"));
    }

    private static String trimLeadingZeroesFromLastPart(String input) {
        String delem = "-";
        String result = "";
        if (input != null && !input.isEmpty()) {
            String[] data = input.split(delem);
            StringBuilder tempStrBldr = new StringBuilder();
            for (int idx = 0; idx < data.length; idx++) {
                if (idx == data.length - 1) {
                    tempStrBldr.append(trimLeadingZeroes(data[idx]));
                } else {
                    tempStrBldr.append(data[idx]);
                }
                tempStrBldr.append(delem);
            }
            result = tempStrBldr.substring(0, tempStrBldr.length() - 1);
        }
        return result;
    }

    private static String trimLeadingZeroes(String input) {
        int idx;
        for (idx = 0; idx < input.length() - 1; idx++) {
            if (input.charAt(idx) != '0') {
                break;
            }
        }
        return input.substring(idx);
    }

}

输出:

2020-LI50532-3329-100

相关问题