#android #string #parsing #url
#Android #строка #синтаксический анализ #url
Вопрос:
Я пытаюсь получить хост и IP-адрес из URL-адреса. Этот URL-адрес задается текстовым полем, при нажатии кнопки требуется, чтобы указанный текст сохранялся в строке, и я хочу преобразовать эту строку в URL. Это мой код:
String value;
String ip;
URL url;
public void btnOnClick(View v){
EditText text = (EditText)findViewById(R.id.txtWebsite);
value = "http://" text.getText().toString();
TextView output = (TextView)findViewById(R.id.txtViewOutput);
if (value.length() < 3){
output.setText("At least 3 characters are required ");
}else{
try {
url = new URL(value);
//Here is where I get my error: (look below for the given error)
InetAddress address = InetAddress.getByName(new URL(***url***).getHost());
ip = address.getHostAddress();
}catch (MalformedURLException e){
System.out.println("Error: " e.getMessage());
e.printStackTrace();
}
}
}
Ошибка:
http://oi60.tinypic.com/b6vpxy.jpg
Поэтому мне кажется, что он не преобразует строку в URL, и я не знаю, как я могу это исправить. Если бы кто-нибудь мог указать мне правильное направление и сказать, что я делаю не так, я был бы признателен.
Комментарии:
1. Ваша ссылка на изображение не работает.
2. Попробуйте это: oi60.tinypic.com/b6vpxy.jpg
3. Это работает для меня, я не понимаю, почему это не для вас.
Ответ №1:
Переменная url
уже имеет тип URL
. не нужно ничего делать new URL(url)
, просто сделайте это вместо этого:
InetAddress address = InetAddress.getByName(url.getHost());
Комментарии:
1. Когда я это делаю, я получаю сообщение об ошибке: UnknownHostException
2. Это означает, что имя хоста не было найдено. Работает ли это для хорошо известного имени хоста, такого как ‘stackoverflow.com ?
3. Выполнение этого: url = новый URL (» stackoverflow.com » ); InetAddress address = InetAddress.getByName(url.getHost()); выдает ту же ошибку (http и www. part автоматически удаляются стеком, но его там)
4. Вы должны установить протокол. Попробуйте с помощью http:// www.stackoverflow.com и это сработает.
5. Это прекрасно работает для меня с помощью ‘http:// stackoverflow.com ‘ (минус пробел), если устройство имеет правильное сетевое подключение. Сбой в режиме полета с UnknownHostException.
Ответ №2:
вы можете использовать это для синтаксического анализа URL-адреса из строки:
ArrayList retrieveLinks(String text) {
ArrayList links = new ArrayList();
String regex = "\(?\b(http://|www[.])[-A-Za-z0-9 amp;@#/%?=~_()|!:,.;]*[-A-Za-z0-9 amp;@#/%=~_()|]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
char[] stringArray1 = urlStr.toCharArray();
if (urlStr.startsWith("(") amp;amp; urlStr.endsWith(")"))
{
char[] stringArray = urlStr.toCharArray();
char[] newArray = new char[stringArray.length-2];
System.arraycopy(stringArray, 1, newArray, 0, stringArray.length-2);
urlStr = new String(newArray);
System.out.println("Finally Url =" newArray.toString());
}
System.out.println("...Url..." urlStr);
links.add(urlStr);
}
return links;
}
надеюсь, это поможет.