Reputation: 23
String str = "internet address : http://test.com Click this!";
I want to get "http://test.com", so I wrote like this.
String[] split = str.split(" ");
for ( int i = 0 ; i < split.length ; i++ ) {
if ( split[i].contains("http://") ) {
return split[i];
}
}
but I think this is ineffective. how to get that more easily?
Upvotes: 2
Views: 392
Reputation: 146
You could use regex for it
String str = "internet address : http://test.com Click this!";
Pattern pattern = Pattern.compile("((http|https)\\S*)");
Matcher matcher = pattern.matcher(str);
if (matcher.find())
{
System.out.println(matcher.group(1));
}
Upvotes: 0
Reputation: 2846
I just made a quick solution for the same. It should work for you perfectly.
package Main.Kunal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class URLOutOfString {
public static void main(String[] args) {
String str = "internet address : http://test.com Click this!, internet address : http://tes1t.com Click this!";
List<String> result= new ArrayList<>();
int counter = 0;
final Pattern urlPattern = Pattern.compile(
"(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)"
+ "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*"
+ "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
Matcher matcher = urlPattern.matcher(str);
while (matcher.find()) {
result.add(str.substring(matcher.start(1), matcher.end()));
counter++;
}
System.out.println(result);
}
}
This will find all URLs in your string and add it to arraylist. You can use it as per your business need.
Upvotes: 0
Reputation: 1
It is not clear if the structure of the input string is constant, however, I would do something like this:
String str = "internet address : http://test.com Click this!";
// get the index of the first letter of an url
int urlStart = str.indexOf("http://");
System.out.println(urlStart);
// get the first space after the url
int urlEnd = str.substring(urlStart).indexOf(" ");
System.out.println(urlEnd);
// get the substring of the url
String urlString = str.substring(urlStart, urlStart + urlEnd);
System.out.println(urlString);
Upvotes: 0
Reputation: 6732
Usually, this is either done with a regular expression or with indexOf
and substring
.
With a regular expression, this can be done like that:
// This is using a VERY simplified regular expression
String str = "internet address : http://test.com Click this!";
Pattern pattern = Pattern.compile("[http:|https:]+\\/\\/[\\w.]*");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
You can read here why it's simplified: https://mathiasbynens.be/demo/url-regex - tl;dr: the problem with URLs is they can have so many different patterns which are valid.
With split, there would be a way utilizing the URL class of Java:
String[] split = str.split(" ");
for (String value : split) {
try {
URL uri = new URL(value);
System.out.println(value);
} catch (MalformedURLException e) {
// no valid url
}
}
You can check their validation in the OpenJDK source here.
Upvotes: 1
Reputation: 1932
Assuming you always have the same format (some text : URL more text) this can work:
public static void main(String[] args) throws IOException {
String str = "internet address : http://test.com Click this!";
String first = str.substring(str.indexOf("http://"));
String second = first.substring(0, first.indexOf(" "));
System.out.println(second);
}
But better is regex as suggested in different answer
Upvotes: 1
Reputation: 140319
Find the http://
in the string, then look forwards and backwards for the space:
int pos = str.indexOf("http://");
if (pos >= 0) {
// Look backwards for space.
int start = Math.max(0, str.lastIndexOf(' ', pos));
// Look forwards for space.
int end = str.indexOf(' ', pos + "http://".length());
if (end < 0) end = str.length();
return str.substring(start, end);
}
Upvotes: 0
Reputation: 1209
My try with regex
String regex = "http?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)";
String str = "internet address : http://test.com Click this!";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
result:
http://test.com
source: here
Upvotes: 0