How to replace a given substring with "" from a given string? - java

I went through a couple of examples to replace a given sub-string from a given string with "" but could not achieve the result. The String is too long to post and it contains a sub-string which is as follows:-
/image/journal/article?img_id=24810&t=1475128689597
I want to replace this sub-string with "".Here the value of img_id and t can vary, so I would have to use regular expression. I tried with the following code:-
String regex="^/image/journal/article?img_id=([0-9])*&t=([0-9])*$";
content=content.replace(regex,"");
Here content is the original given string. But this code is actually not replacing anything from the content. So please help..any help would be appreciated .thanx in advance.

Use replaceAll works in nice way with regex
content=content.replaceAll("[0-9]*","");
Code
String content="/image/journal/article?img_id=24810&t=1475128689597";
content=content.replaceAll("[0-9]*","");
System.out.println(content);
Output :
/image/journal/article?img_id=&t=
Update : simple, might be little less cozy but easy one
String content="sas/image/journal/article?img_id=24810&t=1475128689597";
content=content.replaceAll("\\/image.*","");
System.out.println(content);
Output:
sas
If there is something more after t=1475128689597/?tag=343sdds and you want to retain ?tag=343sdds then use below
String content="sas/image/journal/article?img_id=24810&t=1475128689597/?tag=343sdds";
content=content.replaceAll("(\\/image.*[0-9]+[\\/])","");
System.out.println(content);
}
Output:
sas?tag=343sdds

If you're trying to replace the substring of the URL with two quotations like so:
/image/journal/article?img_id=""&t=""
Then you need to add escaped quotes \"\" inside your content assignment, edit your regex to only look for the numbers, and change it to replaceAll:
content=content.replaceAll(regex,"\"\"");

You can use Java regex Utility to replace your String with "" or (any desired String literal), based on given pattern (regex) as following:
String content = "ALPHA_/image/journal/article?img_id=24810&t=1475128689597_BRAVO";
String regex = "\\/image\\/journal\\/article\\?img_id=\\d+&t=\\d+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
String replacement = matcher.replaceAll("PK");
System.out.println(replacement); // Will print ALPHA_PK_BRAVO
}

Related

Java replace all regex matches

I have htmlBody field which has html of a web page assigned to it. I want to check for all occurences for relative links ending in .html and for each of them to remove their extension. I do not want htmlBody.replaceAll(".html", "") because it will remove for all links and break some external links so my approach is to find all occurences that matches regex, and for each occurence to remove their extension using replaceAll() and append to sb. I tried to follow the example from official documentation but apparently it does not change any link, what could be the problem?
StringBuilder sb = new StringBuilder();
Pattern p = Pattern.compile("^\\/(.+\\\\)*(.+).(html)$");
Matcher m = p.matcher(htmlBody);
while (m.find()) {
String updatedLink = m.group().replaceAll(".html", "");
m.appendReplacement(sb, updatedLink);
}
m.appendTail(sb);
your regex was wrong, ^ match start of string, $ match end of string.
so matcher in your code will never match.
right regex like Pattern p = Pattern.compile("['\"]\\/(.+\\\\)*(.+).(html)");
but, it can't match <a href=/a.html>

Replace dot in between slash i.e. '/./' with single slash '/'

For this string dirPath,
String dirPath = "c:/create/a/dir/very/deep/inside/../././../../../dir/";
I want the output string to look like :
"c:/create/a/dir/very/deep/inside/../../../../dir/";
I used :
dirPath.replaceAll("/[.]/", "/");
but that gave :
c:/create/a/dir/very/deep/inside/.././../../../dir/
^^^
then, tried with one more replaceAll as:
dirPath.replaceAll("/[.]/", "/").replaceAll("/[.]/", "/");
and that worked!
My question is why couldn't one call achieve the same result?
How to achieve it in simplest way?
P.S. Another regex that didn't work for me : .replaceAll("($|/)[.]/", "$1")
You can use a lookahead pattern to avoid consuming the slash needed by the subsequent match:
dirPath.replaceAll("/\\.(?=/)", "")
Demo: https://regex101.com/r/qWKVU3/1 or http://tpcg.io/ijmYJF

How to extract image url from a string?

I am trying to extract image url from inside of a string. I am using Pattern and Matcher. I am using a regular expression to match the same. Whenever I am trying to debug the code, both, matcher.matches() and matcher.find() result into false.
I am attaching the image url and regular expression as well as my code.
Pattern pattern_name;
Matcher matcher_name;
String regex = "(http(s?):/)(/[^/]+)+\" + \"\\.(?:jpg|gif|png)";
String url = "http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3.jpg";
pattern_name = Pattern.compile(regex);
matcher_name = pattern_name.matcher(url);
matcher_name.matches();
matcher_name.find();
You seem to have some issue with the regex, the \" + \" should come from some code you mistook for a regex. That subpattern requires a quote, one or more spaces, then a space, and another double quote to appear right before the extension. It matches something like http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3" ".jpg.
Also, there are two redundant capture groups at the beginning, you do not need to use them.
Use
String regex = "https?:/(?:/[^/]+)+\\.(?:jpg|gif|png)";
See this demo
Java demo:
String rx = "https?:/(?:/[^/]+)+\\.(?:jpg|gif|png)";
String url = "http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3.jpg";
Pattern pat = Pattern.compile(rx);
Matcher matcher = pat.matcher(url);
if (matcher.matches()) {
System.out.println(matcher.group());
}
Note that Matcher#matches() requires a full string match, while Matcher#find() will find a partial match, a match inside a larger string.
You've escaped the double quotes in the string catenation
so the regex engine sees this (http(s?):/)(/[^/]+)+" + "\.(?:jpg|gif|png)
after c++ parses the string.
You can un-escape it "(http(s?):/)(/[^/]+)+" + "\\.(?:jpg|gif|png)"
or just join them together "(http(s?):/)(/[^/]+)+\\.(?:jpg|gif|png)"
If the expression is always at the end, I would suggest:
([^/?]+)(?=/?(?:$|\?))

Java regex URL prefix removal

I have a set of URLs. Some of them have a string www as substring and some of them haven't. I need to remove prefixes in each URL.
I tried remove this prefixes using many variants of regexp:
newStr = str.replaceAll("http://|http://www.", "");
newStr = str.replaceAll("^http://|http://www.$", "");
newStr = str.replaceAll("http://|http://www.", "");
where str - is an inputted URL string, and newStr is the URL after replacement.
Each of these variants replaces only http:// prefix, but www. remains in result. How I can change my regexp to remove http:// string as well as http://www. string?
I know that I can use replaceAll() twice:
newStr = str.replaceAll("http://", "").replaceAll("www.", "");
But what should I do to remain one replaceAll() and edit only the regular expression?
newStr = str.replaceFirst("^(http://)?(www\\.)?", "");
please note that . in regex means anything so you need to escape it, or you will strip first 4 symbols from wwwiscool.com and you probably don't want that. And you probably want to replace only the first matching prefix.
You can use str.replace, for example :
String str = "http://www.google.com";
str.replace("http://","").replace("http:// www.","").replace("www.","");
For more information about str.replace

How to check and replace special character(\) contain in a String in java?

I have a String str=p2\7\2010 I want to check and replace if str.contains("\") then replace it into this("\\\\") instead of \. i am unable to do this in Java please give your little effort.
use String.replace():
if (str.contains("\\")) {
str = str.replace("\\", "\\\\");
}
You can also use String.replaceAll(), but it uses regular expressions and so is slower in such trivial case.
UPDATE:
Implementation of String.replace() is based on regular expressions as well, but compiled in Pattern.LITERAL mode.
str.contains("\"") matches string that have a " in them.
What you probably want is str.replaceAll("\\", "\\\\")
Additionally; for checking if it contains a \ you'd need str.contains("\\"), since the \ is a special character it has to be escaped.
Try this,
String newString = oldString.replace("/", "//");
or try pattern method,
Pattern pattern = Pattern.compile("/");
Matcher matcher = pattern.matcher("abc/xyz");
String output = matcher.replaceAll("//");

Categories

Resources