我需要使用循环将每一行文本拆分为一个数组。问题是,鉴于文本文件的格式(我无法更改),没有明显的分隔符可供使用:
Adam Rippon New York, NY 77.58144.6163.6780.94
Brandon Mroz Broadmoor, CO 70.57138.1266.8471.28
Stephen Carriere Boston, MA 64.42138.8368.2770.56
Grant Hochstein New York, NY 64.62133.8867.4468.44
Keegan Messing Alaska, AK 61.15136.3071.0266.28
Timothy Dolensky Atlanta, AL 61.76123.0861.3063.78
Max Aaron Broadmoor, CO 86.95173.4979.4893.51
Jeremy Abbott Detroit, MI 99.86174.4193.4280.99
Jason Brown Skokie Value,IL 87.47182.6193.3489.27
Joshua Farris Broadmoor, CO 78.37169.6987.1783.52
Richard Dornbush All Year, CA 92.04144.3465.8278.52
Douglas Razzano Coyotes, AZ 75.18157.2580.6976.56
Ross Miner Boston, MA 71.94152.8772.5380.34
Sean Rabbit Glacier, CA 60.58122.7656.9066.86
Lukas Kaugars Broadmoor, CO 64.57114.7550.4766.28
Philip Warren All Year, CA 55.80113.2457.0258.22
Daniel Raad Southwest FL 52.98108.0358.6151.42
Scott Dyer Brooklyn, OH 55.78100.9744.3357.64
Robert PrzepioskiRochester, NY 47.00100.3449.2651.08
理想情况下,我希望每个名字都在 [0] 中(或名字在 [0] 中,姓氏在 [1] 中),每个位置都在 [2] 中,或者在城市和州的两个不同索引中,然后每个分数都在自己的索引中。每个人都有四个独立的号码。例如 Adam Rippon 的得分是 77.58、144.61、63.67、80.94
我不能按空格拆分,因为有些城市的名称之间有一个空格(例如 New York 将在两个不同的数组元素中拆分为 New 和 York,而 Broadmoor 将在一个元素中)。不能用逗号分隔城市,因为 Southwest FL 没有逗号。我也不能按小数点拆分数字,因为这些数字是错误的。 那么有没有一种简单的方法可以做到这一点?也许是一种按小数位数拆分数字的方法?
最佳答案
看起来每一列都有固定的大小。因此,在您的情况下,第 1 列的长度为 17 个字符,第二列的长度为 16 个字符,最后一列的长度为 21 个字符。
现在您可以简单地遍历行并使用 substring()
方法。像...
String firstColumn = line.substring(0, 17).trim();
String secondColumn = line.substring(17, 33).trim();
String thirdColumn = line.substring(33, line.length).trim();
要提取数字,我们可以使用正则表达式搜索所有带两位小数的数字。
Pattern pattern = Pattern.compile("(\\d+\\.[0-9]{2})");
Matcher matcher = pattern.matcher(thirdColumn);
while(matcher.find())
{
System.out.println(matcher.group());
}
所以在这种情况下 47.00100.3449.2651.08
将输出
47.00
100.34
49.26
51.08
关于Java - 将文本拆分为没有明显分隔符的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392458/