Java 替换选项卡5和6之后的内容(正则表达式)
我得到了纬度和经度的数据,如果它们未知,那么纬度为-1,经度为-1,然后我得到了正确的位置。 之后,我想用正确的lat和long再次存储该文件,以避免每日查询限制。然而,为了学习和效率,我不想这样做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
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,更新。