Java - Split string - java

i have string which is separated by "." when i try to split it by the dot it is not getting spitted.
Here is the exact code i have. Please let me know what could cause this not to split the string.
public class TestStringSplit {
public static void main(String[] args) {
String testStr = "[Lcom.hexgen.ro.request.CreateRequisitionRO;";
String test[] = testStr.split(".");
for (String string : test) {
System.out.println("test : " + string);
}
System.out.println("Str Length : " + test.length);
}
}
I have to separate the above string and get only the last part. in the above case it is CreateRequisitionRO not CreateRequisitionRO; please help me to get this.

You can split this string through StringTokenizer and get each word between dot
StringTokenizer tokenizer = new StringTokenizer(string, ".");
String firstToken = tokenizer.nextToken();
String secondToken = tokenizer.nextToken();
As you are finding for last word CreateRequisitionRO you can also use
String testStr = "[Lcom.hexgen.ro.request.CreateRequisitionRO;";
String yourString = testStr.substring(testStr.lastIndexOf('.')+1, testStr.length()-1);

String testStr = "[Lcom.hexgen.ro.request.CreateRequisitionRO;";
String test[] = testStr.split("\\.");
for (String string : test) {
System.out.println("test : " + string);
}
System.out.println("Str Length : " + test.length);
The "." is a regular expression wildcard you need to escape it.

Change String test[] = testStr.split("."); to String test[] = testStr.split("\\.");.
As the argument to String.split takes a regex argument, you need to escape the dot character (which means wildcard in regex):

Note that String.split takes in a regular expression, and . has special meaning in regular expression (which matches any character except for line separator), so you need to escape it:
String test[] = testStr.split("\\.");
Note that you escape the . at the level of regular expression once: \., and to specify \. in a string literal, \ needs to be escaped again. So the string to pass to String.split is "\\.".
Or another way is to specify it inside a character class, where . loses it special meaning:
String test[] = testStr.split("[.]");

You need to escape the . as it is a special character, a full list of these is available. Your split line needs to be:
String test[] = testStr.split("\\.");

Split takes a regular expression as a parameter. If you want to split by the literal ".", you need to escape the dot because that is a special character in a regular expression. Try putting 2 backslashes before your dot ("\\.") - hopefully that does what you are looking for.

String test[] = testStr.split("\\.");

Related

Get string before first "$"

I want to get the String before the first $. I used the code below but it doesn't give me the required output, which is name
String sInputFld = "name$name22";
String sOutputFld = sInputFld .split("$")[0];
Your problem is because your delimiter is $ that has special meaning in regular expression that used in split(). You have to escape it:
String sOutputFld = sInputFld .split("\\$")[0];
EDIT:
However using split() for extracting only first fragment seems not effective. You can use substring() and index():
int dollarPos = str.indexOf("$"); // here $ is not escaped because regex is not used\
if (dollarPos >= 0) {
fragment = str.substring(0, dollarPos);
}
Use a combination of indexOf and substring for a String. Something of the sort will do:
String s = input.substring(0, input.indexOf('$'));
You can use this method:
String string = "name$name22";
String[] parts = string.split("\\$");
String part1 = parts[0]; // name
String part2 = parts[1]; // name22
Cange your second line to
String sOutputFld = sInputFld .split("\\$")[0];
the $ is a special character in regexp. It means the end of string. so you have to escape it.

How to replace all numbers in java string

I have string like this String s="ram123",d="ram varma656887"
I want string like ram and ram varma so how to seperate string from combined string
I am trying using regex but it is not working
PersonName.setText(cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1))).replaceAll("[^0-9]+"));
The correct RegEx for selecting all numbers would be just [0-9], you can skip the +, since you use replaceAll.
However, your usage of replaceAll is wrong, it's defined as follows: replaceAll(String regex, String replacement). The correct code in your example would be: replaceAll("[0-9]", "").
You can use the following regex: \d for representing numbers. In the regex that you use, you have a ^ which will check for any characters other than the charset 0-9
String s="ram123";
System.out.println(s);
/* You don't need the + because you are using the replaceAll method */
s = s.replaceAll("\\d", ""); // or you can also use [0-9]
System.out.println(s);
To remove the numbers, following code will do the trick.
stringname.replaceAll("[0-9]","");
Please do as follows
String name = "ram varma656887";
name = name.replaceAll("[0-9]","");
System.out.println(name);//ram varma
alternatively you can do as
String name = "ram varma656887";
name = name.replaceAll("\\d","");
System.out.println(name);//ram varma
also something like given will work for you
String given = "ram varma656887";
String[] arr = given.split("\\d");
String data = new String();
for(String x : arr){
data = data+x;
}
System.out.println(data);//ram varma
i think you missed the second argument of replace all. You need to put a empty string as argument 2 instead of actually leaving it empty.
try
replaceAll(<your regexp>,"")
you can use Java - String replaceAll() Method.
This method replaces each substring of this string that matches the given regular expression with the given replacement.
Here is the syntax of this method:
public String replaceAll(String regex, String replacement)
Here is the detail of parameters:
regex -- the regular expression to which this string is to be matched.
replacement -- the string which would replace found expression.
Return Value:
This method returns the resulting String.
for your question use this
String s = "ram123", d = "ram varma656887";
System.out.println("s" + s.replaceAll("[0-9]", ""));
System.out.println("d" + d.replaceAll("[0-9]", ""));

String.split() using multiple character delimeter

I have a String saved in the database like this:
01/01/2014$%^&02/01/2014
I am using the split() java method. Here is my code:
String value = database.getValue(); // this returns the value mentioned above
String values[] = value.split("$%^&");
System.out.println("length is = " + values.length);
System.out.println(values[0]);
The Output:
length is = 1
01/01/2014$%^&02/01/2014
What am I doing wrong?
Use Pattern#quote:
String values[] = value.split(Pattern.quote("$%^&"));
What am I doing wrong?
String#split takes a regex as its argument. Some characters in your String have special meaning. In your case, you want the String representation, not regex. quote does that for you.
Alternative solutions:
Escape the special characters by \\ (Escaping regex is done by \. But in Java, \ is written \\)
Use String#replace that accepts String
You can try this too. Here we can escape special characters.
String value = "01/01/2014$%^&02/01/2014";
String values[] = value.split("\\$%\\^&");
System.out.println("length is = " + values.length);
System.out.println(values[0]);
Out put:
length is = 2
01/01/2014

How can I split a string by two delimiters?

I know that you can split your string using myString.split("something"). But I do not know how I can split a string by two delimiters.
Example:
mySring = "abc==abc++abc==bc++abc";
I need something like this:
myString.split("==|++")
What is its regularExpression?
Use this :
myString.split("(==)|(\\+\\+)")
How I would do it if I had to split using two substrings:
String mainString = "This is a dummy string with both_spaces_and_underscores!"
String delimiter1 = " ";
String delimiter2 = "_";
mainString = mainString.replaceAll(delimiter2, delimiter1);
String[] split_string = mainString.split(delimiter1);
Replace all instances of second delimiter with first and split with first.
Note: using replaceAll allows you to use regexp for delimiter2. So, you should actually replace all matches of delimiter2 with some string that matches delimiter1's regexp.
You can use this
mySring = "abc==abc++abc==bc++abc";
String[] splitString = myString.split("\\W+");
Regular expression \W+ ---> it will split the string based upon non-word character.
Try this
String str = "aa==bb++cc";
String[] split = str.split("={2}|\\+{2}");
System.out.println(Arrays.toString(split));
The answer is an array of
[aa, bb, cc]
The {2} matches two characters of the proceding character. That is either = or + (escaped)
The | matches either side
I am escaping the \ in java so the regex is actually ={2}|\+{2}

In Java how do you replace all instances of a character except the first one?

In Java trying to find a regular expression that will match all instances of a specific character (:) except the first instance, want to replace all instances except first with nothing.
I can do this,
Pattern p = Pattern.compile(":");
Matcher m = p.matcher(input);
String output = m.replaceAll("");
and there is also m.replaceFirst() but I want to replace everything but first.
Naive approach:
String[] parts = str.split(":", 2);
str = parts[0] + ":" + parts[1].replaceAll(":", "");
For regex replace use match pattern \G((?!^).*?|[^:]*:.*?): and as replacement use first group $1
See and test the regex code in Perl here.
public static void main(String[] args) {
String name ="1_2_3_4_5";
int index = name.indexOf("_");
String name1 = name.substring(index+1);
name1 = name1.replace("_", "#");
System.out.println(name.substring(0,index+1)+ name1);
}
You can use reg ex
String str1 = "A:B:C:D:E:F:G:H:I:J:K:L:M";
str1= str1.replaceAll("([:|_].*?):", "$1_");
str1= str1.replaceAll("([:|_].*?):", "$1_");
Here I cant modify the regex to have output in first replace itself. Actually first replaceAll do replace ':' with '_' in alternate positions.
if (matcher.find()) {
String start = originalString.substring(0, matcher.end());
matcher.reset(originalString.substring(matcher.end(), originalString.length()));
replacedString = start + matcher.replaceAll("");
}

Categories