2012-03-12 47 views
0

我获得了经纬度数据,如果它们未知,那么它的-1是拉特,-1是长的,然后我得到正确的位置。 之后,我想用正确的经纬度再次存储文件,并避免每日查询限制。然而,对于学习和工作效率的目的,我不想做这样替换标签5和6之后的内容(正则表达式)

id+"\t"+region+"\t"+ etc... 

这是线什么样子:

5 Canada British Colombia Vancouver -1 -1 

我猜它必须能够与

lines[i].replaceAll("regex", lat); 
lines[i].replaceAll("regex", lon); 

或甚至可能在一行中。

正则表达式应该是什么?

line.replaceAll("^((?:[^\t]*\t){4})[^\t]*", "$1" + lat); 
line.replaceAll("^((?:[^\t]*\t){5})[^\t]*", "$1" + lon); 

或者两者都是一个:

+0

这个文件的每一行都应该对应一个名为(比如说)'City'的类的实例;正如你显然做的那样,而不是像'String []'那样,你应该有一个'City []'。然后,您将具有将文件的一行解析为“City”实例并将“City”实例序列化回“String”的逻辑。那么你就可以写出“城市[i] .setLatitude(...)'和'city [i] .setLongitude(...)'(或者只是'city [i] .latitude = ...'和'city [i] .longitutde = ...'如果你想对你的封装级别更诚实一点)。 – ruakh 2012-03-12 22:45:53

+0

假设你首先解析线,以确定纬度/经度是否为-1?如果通过添加字符串来重建线路可能会更容易... – DNA 2012-03-12 22:46:06

+0

我已经准备好了那些类,并且我从另一个文件加载城市。此文件仅用于基于想法和地理原因的图像,这在其他文件 – clankill3r 2012-03-12 22:56:39

回答

2

你可以用做

line.replaceAll("^((?:[^\t]*\t){4})[^\t]*\t[^\t]*", "$1" + lat + "\t" + lon); 
+0

中没有显示,看起来相当复杂:) 它不适用于我: 'String line =“5 \ tCanada \ tBritish Colombia \ tVancouver \ t-1 \ t-1“;' 'float lat = -55.0545;' 'float lon = 55.8473;' 'line = line.replaceAll(”^((?:[^ \ t] * \ t){\ t [^ \ t] *“,”$ 1“+ lat +”\ t“+ lon);' 'println(line);' – clankill3r 2012-03-12 23:00:19

+1

@ clankill3r:Qtax只是错误的领域(或可能没有意识到“不列颠哥伦比亚省”是一个单一的价值)。如果您将“{5}”更改为“{4}”,则您的代码应该可以正常工作。 – ruakh 2012-03-12 23:57:17

+0

嗯,我的标题是“在标签5和6之后替换内容”。谢谢@ruakh,更新。 – Qtax 2012-03-13 00:14:13

1

然而,对于学习和工作效率的目的,我不想做这样

id+"\t"+region+"\t"+ etc.. 

这是最好的办法,我想当你的目标是提高效率。更高效的可能是使用具有预定义大小的StringBuilder。

StringBuilder sb = new StringBuilder(line.length() + 15); 
sb.append(id); 
sb.append('\t'); 
sb.append(region); 
// .... 
+0

为什么+4?在字符串生成器中,由于纬度和经度可能相当长,所以不应该更长一些? 什么使字符串生成器更有效#### id +“\ t”+ region +“\ t”+等。 – clankill3r 2012-03-12 22:58:58

+0

@ clankill3r:是的,我不明白是什么。感谢您的注意。我搜索了它,确实如此。我想,增加15个会更好。 – 2012-03-12 23:00:46