首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析包含多个符号的字符串将导致崩溃。

解析包含多个符号的字符串将导致崩溃。
EN

Stack Overflow用户
提问于 2017-03-24 15:13:56
回答 2查看 132关注 0票数 1

我试图在Java中拆分一些包含","":""-"的字符

例如,

如果输入为58,1:2-4,则应生成以下输出

  1. 书号: 58
  2. 章号:1
  3. 诗句= 2,3,4

下面是我试过的代码,

代码语言:javascript
运行
复制
private int getBookNumber() {
        bookNumber = chapterNumber.split("[,]")[0];
        return Integer.valueOf(bookNumber);
    }

    private int getChapterNumber() {
        chapterNumber = sample.split("[:]")[0];
        verseNumbers = sample.split("[:]")[1];
        return Integer.valueOf(chapterNumber);
    }

    private List<Integer> getVerseNumbers(String bookValue) {
        List<Integer> verseNumList = new ArrayList<>();
        if (bookValue.contains("-")) {
            //TODO parse - separated string
        } else {
            verseNumList.add(Integer.valueOf(bookValue));
        }

        return verseNumList;
    }

我将以以下方式依次调用它们

代码语言:javascript
运行
复制
int chapterNumber = getChapterNumber(); 
int  bookNumber    = getBookNumber();
List<Integer> verseNumbers  = getVerseNumbers(this.verseNumbers);

但是Im是由: java.lang.NumberFormatException:无效int:行int chapterNumber = getChapterNumber();中的"58,1“引起的

有有效的方法来解析这个字符串吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-24 15:18:15

您应该像这样更改getChapterNumber:

代码语言:javascript
运行
复制
private int getChapterNumber() {
    chapterNumber = sample.split("[:]")[0];
    verseNumbers = sample.split("[:]")[1];
    return Integer.valueOf(chapterNumber.split("[,]")[1]);
}

但是最好的方法是使用matcher:

代码语言:javascript
运行
复制
String line = "58,1:2-4";
Pattern pattern = Pattern.compile("(\\d+),(\\d+):(.*)");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    System.out.println("group 1: " + matcher.group(1));
    System.out.println("group 2: " + matcher.group(2));
    System.out.println("group 3: " + matcher.group(3));
}

输出:

代码语言:javascript
运行
复制
group 1: 58
group 2: 1
group 3: 2-4
票数 1
EN

Stack Overflow用户

发布于 2017-03-24 15:27:09

我可以使用基本字符串方法来处理这个问题,以避免使用正则匹配器附带的笨重设备:

代码语言:javascript
运行
复制
String input = "58,1:2-4";
int commaIndex = input.indexOf(",");
int colonIndex = input.indexOf(":");
int bookNumber = Integer.valueOf(input.substring(0, commaIndex));
int chapterNumber = Integer.valueOf(input.substring(commaIndex+1, colonIndex));
String verseString = input.substring(colonIndex+1);
String[] verses = verseString.split("-");
int startVerse = Integer.valueOf(verses[0]);
int endVerse = Integer.valueOf(verses[1]);
int[] allVerses = new int[endVerse - startVerse + 1];
for (int i=0; i < allVerses.length; ++i) {
    allVerses[i] = startVerse + i;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43003109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档