What's the best way to have stringTokenizer split up a line of text into predefined variables

╄→гoц情女王★ 提交于 2019-12-24 04:48:09

问题


I'm not sure if the title is very clear, but basically what I have to do is read a line of text from a file and split it up into 8 different string variables. Each line will have the same 8 chunks in the same order (title, author, price, etc). So for each line of text, I want to end up with 8 strings.

The first problem is that the last two fields in the line may or may not be present, so I need to do something with stringTokenizer.hasMoreTokens, otherwise it will die messily when fields 7 and 8 are not present.

I would ideally like to do it in one while of for loop, but I'm not sure how to tell that loop what the order of the fields is going to be so it can fill all 8 (or 6) strings correctly. Please tell me there's a better way that using 8 nested if statements!

EDIT: The String.split solution seems definitely part of it, so I will use that instead of stringTokenizer. However, I'm still not sure what the best way of feeding the individual strings into the constructor. Would the best way be to have the class expecting an array, and then just do something like this in the constructor:

line[1] = isbn;
line[2] = title;

回答1:


The best way is to not use a StringTokenizer at all, but use String's split method. It returns an array of Strings, and you can get the length from that.

For each line in your file you can do the following:

String[] tokens = line.split("#");

tokens will now have 6 - 8 Strings. Use tokens.length() to find out how many, then create your object from the array.




回答2:


Regular expression is the way. You can convert your incoming String into an array of String using the split method

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)




回答3:


Would a regular expression with capture groups work for you? You can certainly make parts of the expression optional.

An example line of data or three might be helpful.




回答4:


Is this a CSV or similar file by any chance? If so, there are libraries to help you, for example Apache Commons CSV (link to alternatives on their page too). It will get you a String[] for each line in the file. Just check the array size to know what optional fields are present.



来源:https://stackoverflow.com/questions/236387/whats-the-best-way-to-have-stringtokenizer-split-up-a-line-of-text-into-predefi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!