我是 Java 新手,我想知道如何用值拆分字串。
我有一個這樣的陣列:
String[] CITIES = {
"Vancouver 94.0 15.0",
"Seattle 88.0 52.0",
"Portland 74.0 88.0",
"San Francisco 42.0 241.0",
"Los Angeles 89.0 338.0",
"Las Vegas 153.0 302.0",
"Calgary 259.0 15.0",
"Salt Lake City 224.0 216.0",
"Phoenix 192.0 348.0",
"Helena 247.0 90.0"}
我想將每個字串分成 3 個值,名稱 (String)x-value (double)和y-value (double)
首先,我想在每個空間進行切割,但對于像舊金山這樣的城市,它行不通:(有什么想法嗎?
uj5u.com熱心網友回復:
Pattern regex = Pattern.compile("^(.*) ([0-9.] ) ([0-9.] )$");
for(String city: CITIES) {
Matcher mx = regex.matcher(city);
if(mx.find())
System.out.printf("City: %s, Lat: %s, Lon: %s%n", mx.group(1), mx.group(2), mx.group(3));
}
帶輸出
City: Vancouver, Lat: 94.0, Lon: 15.0
City: Seattle, Lat: 88.0, Lon: 52.0
City: Portland, Lat: 74.0, Lon: 88.0
City: San Francisco, Lat: 42.0, Lon: 241.0
City: Los Angeles, Lat: 89.0, Lon: 338.0
City: Las Vegas, Lat: 153.0, Lon: 302.0
City: Calgary, Lat: 259.0, Lon: 15.0
City: Salt Lake City, Lat: 224.0, Lon: 216.0
City: Phoenix, Lat: 192.0, Lon: 348.0
City: Helena, Lat: 247.0, Lon: 90.0
(注意:將字串轉換為數字使用 eg Double::parseDouble)
uj5u.com熱心網友回復:
我懷疑這個作業是為了讓 OP 了解課程的方法lastIndexOf和substring方法String。
這是我的許多測驗之一的測驗結果。
City [name=Vancouver, latitude=94.0, longitude=15.0]
City [name=Seattle, latitude=88.0, longitude=52.0]
City [name=Portland, latitude=74.0, longitude=88.0]
City [name=San Francisco, latitude=42.0, longitude=241.0]
City [name=Los Angeles, latitude=89.0, longitude=338.0]
City [name=Las Vegas, latitude=153.0, longitude=302.0]
City [name=Calgary, latitude=259.0, longitude=15.0]
City [name=Salt Lake City, latitude=224.0, longitude=216.0]
City [name=Phoenix, latitude=192.0, longitude=348.0]
City [name=Helena, latitude=247.0, longitude=90.0]
這是完整的可運行代碼。該parseCities方法找到最后兩個空格的位置并用于substring將其“拆分”String為三部分。
public class SplitCities {
public static void main(String[] args) {
String[] cities = {
"Vancouver 94.0 15.0",
"Seattle 88.0 52.0",
"Portland 74.0 88.0",
"San Francisco 42.0 241.0",
"Los Angeles 89.0 338.0",
"Las Vegas 153.0 302.0",
"Calgary 259.0 15.0",
"Salt Lake City 224.0 216.0",
"Phoenix 192.0 348.0",
"Helena 247.0 90.0" };
SplitCities sc = new SplitCities();
City[] parsedCities = sc.parseCities(cities);
for (int index = 0; index < parsedCities.length; index ) {
System.out.println(parsedCities[index]);
}
}
public City[] parseCities(String[] cities) {
City[] parsedCities = new City[cities.length];
for (int index = 0; index < cities.length; index ) {
String line = cities[index];
int longitudePosition = line.lastIndexOf(' ');
int latitudePosition = line.lastIndexOf(' ', longitudePosition - 1);
String name = line.substring(0, latitudePosition);
double latitude = Double.valueOf(line.substring(
latitudePosition 1, longitudePosition));
double longitude = Double.valueOf(line.substring(longitudePosition));
parsedCities[index] = new City(name, latitude, longitude);
}
return parsedCities;
}
public class City {
private final double latitude, longitude;
private final String name;
public City(String name, double latitude, double longitude) {
this.name = name;
this.latitude = latitude;
this.longitude = longitude;
}
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public String getName() {
return name;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("City [name=");
builder.append(name);
builder.append(", latitude=");
builder.append(latitude);
builder.append(", longitude=");
builder.append(longitude);
builder.append("]");
return builder.toString();
}
}
}
uj5u.com熱心網友回復:
您可以使用split正則運算式來標識以數字開頭的要拆分的值" (?=[\\d])"
for (String city : cities) {
String[] values = city.split(" (?=[\\d])");
System.out.println(Arrays.toString(values));
// do stuff
}
uj5u.com熱心網友回復:
您可以定義一個正則運算式來決議字串和兩個雙打,并使用split此處定義的方法拆分每個字串https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317724.html
