Java 替换选项卡5和6之后的内容(正则表达式)

Java 替换选项卡5和6之后的内容(正则表达式),java,regex,Java,Regex,我得到了纬度和经度的数据,如果它们未知,那么纬度为-1,经度为-1,然后我得到了正确的位置。 之后,我想用正确的lat和long再次存储该文件,以避免每日查询限制。然而,为了学习和效率,我不想这样做 id+"\t"+region+"\t"+ etc... 这是线条的样子: 5 Canada British Colombia Vancouver -1 -1 我猜这一定是有可能的 lines[i].replaceAll("regex", lat); lines[i].repla

我得到了纬度和经度的数据,如果它们未知,那么纬度为-1,经度为-1,然后我得到了正确的位置。 之后,我想用正确的lat和long再次存储该文件,以避免每日查询限制。然而,为了学习和效率,我不想这样做

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);
或两者兼有,其中一项:

line.replaceAll("^((?:[^\t]*\t){4})[^\t]*\t[^\t]*", "$1" + lat + "\t" + lon);
您可以通过以下方式完成:

line.replaceAll("^((?:[^\t]*\t){4})[^\t]*", "$1" + lat);
line.replaceAll("^((?:[^\t]*\t){5})[^\t]*", "$1" + lon);
或两者兼有,其中一项:

line.replaceAll("^((?:[^\t]*\t){4})[^\t]*\t[^\t]*", "$1" + lat + "\t" + lon);
然而,为了学习和效率,我不想这样做

 id+"\t"+region+"\t"+ etc..
这是最好的方法,我认为当你追求效率的时候。更有效的方法可能是使用具有预定义大小的StringBuilder

StringBuilder sb = new StringBuilder(line.length() + 15);
sb.append(id);
sb.append('\t');
sb.append(region);
// ....
然而,为了学习和效率,我不想这样做

 id+"\t"+region+"\t"+ etc..
这是最好的方法,我认为当你追求效率的时候。更有效的方法可能是使用具有预定义大小的StringBuilder

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

该文件的每一行都应该对应于一个名为(比如)
City
的类的实例;你应该有一个
城市[]
,而不是像你看起来那样有一个
字符串[]
。然后,您将拥有将文件行解析为
City
实例的逻辑,以及将
City
实例序列化回
字符串的逻辑。因此,您可以编写
city[i].setLatitude(…)
city[i].setLatitude(…)
(或者只写
city[i].latitude=…
city[i].Longitude=…
,如果您想更诚实地了解您的封装级别的话),确定lat/lon是否为-1?如果,那么通过添加字符串来重建行可能更容易…我已经准备好了这些类,并且我从另一个文件加载城市的。此文件仅用于基于其他文件中未表示的想法和地理原因的图像。此文件的每一行应对应于名为(say)
City
的类的实例;你应该有一个
城市[]
,而不是像你看起来那样有一个
字符串[]
。然后,您将拥有将文件行解析为
City
实例的逻辑,以及将
City
实例序列化回
字符串的逻辑。因此,您可以编写
city[i].setLatitude(…)
city[i].setLatitude(…)
(或者只写
city[i].latitude=…
city[i].Longitude=…
,如果您想更诚实地了解您的封装级别的话),确定lat/lon是否为-1?如果,那么通过添加字符串来重建行可能更容易…我已经准备好了这些类,并且我从另一个文件加载城市的。此文件仅用于基于想法和地理原因的图像,而在其他文件中没有表示为什么+4?在字符串生成器中,因为纬度和经度可能相当长,所以它不应该更长吗?是什么让字符串生成器比#####id+“\t”+region+“\t”+等更有效?@clangkill3r:是的,我不明白是什么。谢谢你的注意。我用谷歌搜索了一下,是的,的确如此。我想加15会更好。为什么加4?在字符串生成器中,因为纬度和经度可能相当长,所以它不应该更长吗?是什么让字符串生成器比#####id+“\t”+region+“\t”+等更有效?@clangkill3r:是的,我不明白是什么。谢谢你的注意。我用谷歌搜索了一下,是的,的确如此。我认为加上15会更好。这看起来很复杂:)我觉得不行:
String line=“5\tCanada\tBritish columbia\tVancouver\t-1\t-1”
float lat=-55.0545
float lon=55.8473
line=line.replaceAll(“^((?:[^\t]*\t){5})[^\t]*\t[^\t]*”,“$1”+lat+“\t”+lon)
println(行)
@clangkill3r:Qtax只是对字段进行了错误计算(或者可能没有意识到
不列颠哥伦比亚省
是一个单一的值)。如果您将
{5}
更改为
{4}
,您的代码应该可以工作。啊,是的,我的标题是“在选项卡5和6之后替换内容”。谢谢@ruakh,已更新。这看起来很复杂:)我无法使用:
String line=“5\tCanada\tBritish columbia\tVancouver\t-1\t-1”
float lat=-55.0545
float lon=55.8473
line=line.replaceAll(“^((?:[^\t]*\t){5})[^\t]*\t[^\t]*”,“$1”+lat+“\t”+lon)
println(行)
@clangkill3r:Qtax只是对字段进行了错误计算(或者可能没有意识到
不列颠哥伦比亚省
是一个单一的值)。如果您将
{5}
更改为
{4}
,您的代码应该可以工作。啊,是的,我的标题是“在选项卡5和6之后替换内容”。谢谢@ruakh,更新。