简体   繁体   English

StringTokenizer 中不需要的行为

[英]unwanted behaviour in StringTokenizer

I have a String Result = "FFF-556-GHH-788;DDR4TG441" .我有一个字符串Result = "FFF-556-GHH-788;DDR4TG441" I use StringTokenizer to split the string on delimeter ';'.我使用 StringTokenizer 分割分隔符';'上的字符串。 But the 2 sub-Strings I get are 1->"FFF-556-GHH-788" and 2->"DDR4TG441DDR4TG441DDR4TG441" .但是我得到的 2 个子字符串是1->"FFF-556-GHH-788"2->"DDR4TG441DDR4TG441DDR4TG441" Why is String 2 repeated 3 times?为什么字符串 2 重复 3 次?

code: main:代码:主要:

datum = parseResult(Result);

fun:乐趣:

public QRResultData parseResult(String Result)
    {
        QRResultData data = new QRResultData();
        StringTokenizer multiTokenizer = new StringTokenizer(Result, ";");

        if(multiTokenizer.hasMoreTokens())
        {
            data.busNumber = multiTokenizer.nextToken();
        }

        if(multiTokenizer.hasMoreTokens())
        {
            data.seatNumber = multiTokenizer.nextToken();
        }
        return data;
    }

Odd, when I ran your code it works.奇怪,当我运行你的代码时,它可以工作。 Can you verify that the code in your question matches the code in production?您能否验证您的问题中的代码与生产中的代码是否匹配?

import java.util.StringTokenizer;

public class So66650493 {

    public static void main(String[] args) {
        String Result = "FFF-556-GHH-788;DDR4TG441";
        final QRResultData datum = new So66650493().parseResult(Result);
        System.out.println("datum = " + datum);
        // datum = QRResultData{busNumber='FFF-556-GHH-788', seatNumber='DDR4TG441'}
        if ("FFF-556-GHH-788".equals(datum.busNumber)
                && "DDR4TG441".equals(datum.seatNumber)) {
            System.out.println("SUCCESS parsed correctly");
        } else {
            System.out.println("FAIL");
        }
    }

    public QRResultData parseResult(String Result) {
        QRResultData data = new QRResultData();
        StringTokenizer multiTokenizer = new StringTokenizer(Result, ";");
        if (multiTokenizer.hasMoreTokens()) {
            data.busNumber = multiTokenizer.nextToken();
        }
        if (multiTokenizer.hasMoreTokens()) {
            data.seatNumber = multiTokenizer.nextToken();
        }
        return data;
    }

    private static class QRResultData {
        String busNumber;
        String seatNumber;

        @Override
        public String toString() {
            return "QRResultData{" +
                    "busNumber='" + busNumber + '\'' +
                    ", seatNumber='" + seatNumber + '\'' +
                    '}';
        }
    }

}

My earlier suggestion to replace StringTokenizer with String.split will not help you much.我之前用 String.split 替换 StringTokenizer 的建议对你没有多大帮助。 But it would make your code slightly more legible.但这会使您的代码更加清晰易读。

public QRResultData parseResult(String Result) {
    QRResultData data = new QRResultData();
    String[] split = Result.split(";");
    data.busNumber = split[0];
    if (split.length > 1) {
        data.seatNumber = split[1];
    }
    return data;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM