我想知道是否有人可以帮我解决删除部分字符串的问题。我正在使用java.util.TimeZone来检索时区“ids”,但我想删除大陆/前缀,基本上剥离了城市名称。我还必须用代码中已经完成的空格替换所有下划线。我似乎无法找到一种方法来摆脱反斜杠和它之前的一切。这是我的代码。感谢
import java.util.*;
import java.util.TimeZone;
import java.util.Date;
import java.text.DateFormat;
public class Maps {
public static void main(String[] args) {
String[] Zone = TimeZone.getAvailableIDs();
int i = 0;
for (i =0 ; i< Zone.length; i++) {
String zone1 = Zone[i].replaceAll("_"," ");
System.out.println(zone1);
}
}
}
答案 0 :(得分:4)
所以你想在第一个斜杠之前删除所有内容,然后用空格替换余数中的任何下划线?使用indexOf
,substring
和replace
(你已经知道)这很容易。
你肯定可以使用正则表达式来执行此操作,如Mr_Spock所建议的那样,但就个人操作而言,我会坚持使用正常的字符串方法:
int slash = text.indexOf('/');
text = text.substring(slash + 1).replace("_", " ");
这是一个完整的例子:
import java.util.TimeZone;
public class Test {
public static void main(String[] args) {
String[] ids = TimeZone.getAvailableIDs();
for (String id : ids) {
int slash = id.indexOf('/');
String stripped = id.substring(slash + 1).replace("_", " ");
System.out.println(stripped);
}
}
}
请注意,这仍然会留下一些有趣的名字,例如“North Dakota / Beulah”,因为原始ID有两个斜杠。
为了完整性,另一种处理斜杠的方法是将字符串拆分为斜杠,然后取第二部分 - 但如上例所示,您可能希望确保它最多分成 两部分,将“北达科他州/ Beulah”作为单一标记。如果没有任何斜杠的任何ID,你还需要小心(上面的代码工作正常,因为indexOf
将返回-1,所以子字符串将成为无操作)。
答案 1 :(得分:2)
对于普通的Java编码器(我假设),我会尝试以非正统的方式处理这个问题。我试着利用正则表达式的力量。
尝试探索java.util.regex
的世界了解RegEx并没有什么坏处,因为它全面用于字符串操作解决方案。
我希望有所帮助。
答案 2 :(得分:0)
检查出来:
public static void main(String[] args) {
String[] Zone = TimeZone.getAvailableIDs();
int i = 0;
for (i =0 ; i< Zone.length; i++) {
String zone1 = Zone[i].replaceAll("_"," ");
if(zone1.indexOf('/') != -1)
zone1 = zone1.substring(zone1.indexOf('/')+1);
System.out.println(zone1);
}
}
答案 3 :(得分:0)
您可以只使用拆分区域: -
String zone1 = Zone[i];
zone1 = (zone1.split("/").length > 1) ? zone1.split("/")[1] : zone1.split("/")[0];
zone1 = zone1.replaceAll("_"," ");
答案 4 :(得分:0)
if(zone1.indexOf("/")!=-1) {
zone1=zone1.substring(zone1.indexOf("/")+1,zone1.length());
System.out.println(zone1);
}