2012-03-12 46 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