我写了一个用于获取纬度和经度的代码,但是,这些值打印有“”。有什么办法可以删除这个字符? 搜索显示它的Unicode地址为U + 00C2,但使用string.replace引发错误。 有什么办法可以删除这个字符? 代码:
import java.net.*;
import java.io.*;
import java.util.Scanner;
import static java.lang.System.*;
class findlatlon {
static String code = " ";
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//gets the city
out.println("enter city, add plus between multiple words");
String term = sc.nextLine();
try {URL url = new URL("http://www.geonames.org/search.html?q=" + term + "&country=");
URLConnection ucl = url.openConnection();
InputStream stream = ucl.getInputStream();
int i;
//the string in which the html code will be stored
code = " ";
while ((i=stream.read())!= -1) {
code += Character.toString((char)i);
}
//printing the html, only for testing
System.out.print(code);
} catch(Exception e) {
System.out.println("error");
}
int i = 0;
char ch = ' ';
String lon = " ";
String lat = " ";
for (i = 0 ;i < code.length() ; i++) {
ch = code.charAt(i);
if (ch == '\u00B0') {
break;
}
}
int j;
char ch2 = ' ';
for (j = i; i > 0; j--) {
ch2 = code.charAt(j);
if (ch2 =='N' || ch2 == 'S') {
break;
}
}
char ch3 = ' ';
int k = 0;
for (k = j; k < 45800; k++) {
ch3 = code.charAt(k);
if (ch3 != '<') {
lat += ch3;
} else {
break;
}
}
char ch4 = ' ';
int z;
for (z = k; z < 45000; z++) {
ch4 = code.charAt(z);
if (ch4 == 'W' || ch4 == 'E') {
break;
}
}
int y;
char ch5 = ' ';
for (y = z; y < 54000; y++) {
ch5 = code.charAt(y);
if (ch5 == '<') {
break;
} else {
lon += ch5;
}
}
System.out.println(lat);
System.out.println(lon);
}
}
输出:
S 33° 52' 4''
E 151° 12' 26''
感谢您的帮助,谢谢!
答案 0 :(得分:1)
但使用string.replace会引发错误
replace
没有理由对此有任何错误。
str = str.replace("Â", "");
或
str = str.replace("\u00C2", "");
也就是说,请参见Filburt's comment。这些字符是使用错误的文本编码读取页面的副作用。 (有关文本编码here的更多信息。)如果您使用正确的编码进行阅读,或使用它们提供的API,则应该不会出现此问题。