java - 在 Java 中将字符串中括号内的值作为整数返回

标签 java regex

我从 cobol copybook 中提取了格式信息,需要使用 switch 或 if 语句来获取 ( ) 中的值。所有值都在一个字符串数组中,我正在使用下面的示例值迭代数组。

X(37)
9(03)
X(15)
9(07)
X
X(1)
X(253)

我的开关盒

private int convertSize(String pic) {
    switch (pic) {      
    case "X" :
        return 1;
    case "X("+ "string inside" +")" :
        return Integer.parseInt("string inside");
    case "9("+ "string inside" +")" :
        return (Integer.parseInt("string inside")+1);
    default:
        return 0;
    }

我应该用“string inside”替换什么才能得到结果? “\d+”不起作用,因为它在数组中保存为字符串。

最佳答案

给你。完全单元测试...

package com.example;

import org.junit.Assert;
import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Question28819604 {

    @Test
    public void test() {
        Assert.assertEquals(37,convertSize("X(37)"));
        Assert.assertEquals(4,convertSize("9(03)"));
        Assert.assertEquals(15,convertSize("X(15)"));
        Assert.assertEquals(8,convertSize("9(07)"));
        Assert.assertEquals(1,convertSize("X"));
        Assert.assertEquals(1,convertSize("X(1)"));
        Assert.assertEquals(253,convertSize("X(253)"));
        Assert.assertEquals(0,convertSize("non-match"));
        Assert.assertEquals(0,convertSize(null));
        Assert.assertEquals(0,convertSize("X(broken)"));
        Assert.assertEquals(0,convertSize("X(broken"));
    }

    private Pattern xPattern = Pattern.compile("X\\((\\d+)\\)");
    private Pattern ninePattern = Pattern.compile("9\\((\\d+)\\)");

    private int convertSize(String pic) {
        if (pic == null) {
            return 0;
        }

        Matcher xPatternMatcher = xPattern.matcher(pic);
        Matcher ninePatternMatcher = ninePattern.matcher(pic);

        if ("X".equals(pic)) {
            return 1;
        } else if (xPatternMatcher.matches()) {
            return Integer.parseInt(xPatternMatcher.group(1));
        } else if (ninePatternMatcher.matches()) {
            return Integer.parseInt(ninePatternMatcher.group(1)) + 1;
        } else {
            return 0;
        }
    }
}

关于java - 在 Java 中将字符串中括号内的值作为整数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819604/

相关文章:

regex - 在文本文件中用制表符替换单个空格的命令

javascript - jQuery 字符串替换匹配的正则表达式

java - 为什么这个 JavaFX 应用程序看起来与 SceneBuilder 中的应用程序有很大不同?

java.util.Objects.requireNonNull 处的 java.lang.NullPointerException

java - 使用 attributeconverter 时,Spring Boot 应用程序未完成启动

c# - 无法删除字符串中的一组字符

regex - 查找并替换为 sed 命令和正则表达式

java - Camel 端点概述?

java - 如何以毫秒为单位存储日期并使用java中的集合进行排序

regex - Perl 解析具有一个或多个字段的字符串