In java how to get substring from a string till a character c?

Java

Java Problem Overview


I have a string (which is basically a file name following a naming convention) abc.def.ghi

I would like to extract the substring before the first . (ie a dot)

In java doc api, I can't seem to find a method in String which does that.
Am I missing something? How to do it?

Java Solutions


Solution 1 - Java

The accepted answer is correct but it doesn't tell you how to use it. This is how you use indexOf and substring functions together.

String filename = "abc.def.ghi";     // full file name
int iend = filename.indexOf("."); //this finds the first occurrence of "." 
//in string thus giving you the index of where it is in the string

// Now iend can be -1, if lets say the string had no "." at all in it i.e. no "." is found. 
//So check and account for it.

String subString;
if (iend != -1) 
{
    subString= filename.substring(0 , iend); //this will give abc
}

Solution 2 - Java

You can just split the string..

public String[] split(String regex)

Note that java.lang.String.split uses delimiter's regular expression value. Basically like this...

String filename = "abc.def.ghi";     // full file name
String[] parts = filename.split("\\."); // String array, each element is text between dots

String beforeFirstDot = parts[0];    // Text before the first dot

Of course, this is split into multiple lines for clairity. It could be written as

String beforeFirstDot = filename.split("\\.")[0];

Solution 3 - Java

look at String.indexOf and String.substring.

Make sure you check for -1 for indexOf.

Solution 4 - Java

If your project already uses commons-lang, StringUtils provide a nice method for this purpose:

String filename = "abc.def.ghi";

String start = StringUtils.substringBefore(filename, "."); // returns "abc"

see javadoc [2.6] [3.1]

Solution 5 - Java

or you may try something like

"abc.def.ghi".substring(0,"abc.def.ghi".indexOf(c)-1);

Solution 6 - Java

How about using regex?

String firstWord = filename.replaceAll("\\..*","")

This replaces everything from the first dot to the end with "" (ie it clears it, leaving you with what you want)

Here's a test:

System.out.println("abc.def.hij".replaceAll("\\..*", "");

Output:

abc

Solution 7 - Java

public void getStrings() {
	String params = "abc.def.ghi";
	String s1, s2, s3;
	s1 = params.substring(0, params.indexOf("."));
	params = params.substring(params.indexOf(".") + 1);
	s2 = params.substring(0, params.indexOf("."));
	params = params.substring(params.indexOf(".") + 1, params.length());
	s3 = params;
}

the solution

> s1="abc" s2="def" s3="ghi"

IF you have more than 3 String , so then it will look exactly like s2

Solution 8 - Java

In java.lang.String you get some methods like indexOf(): which returns you first index of a char/string. and lstIndexOf: which returns you the last index of String/char

From Java Doc:

  public int indexOf(int ch)
  public int indexOf(String str)

Returns the index within this string of the first occurrence of the specified character.

Solution 9 - Java

Here is code which returns a substring from a String until any of a given list of characters:

/**
 * Return a substring of the given original string until the first appearance
 * of any of the given characters.
 * <p>
 * e.g. Original "ab&cd-ef&gh"
 * 1. Separators {'&', '-'}
 * Result: "ab"
 * 2. Separators {'~', '-'}
 * Result: "ab&cd"
 * 3. Separators {'~', '='}
 * Result: "ab&cd-ef&gh"
 *
 * @param original   the original string
 * @param characters the separators until the substring to be considered
 * @return the substring or the original string of no separator exists
 */
public static String substringFirstOf(String original, List<Character> characters) {
    return characters.stream()
            .map(original::indexOf)
            .filter(min -> min > 0)
            .reduce(Integer::min)
            .map(position -> original.substring(0, position))
            .orElse(original);
}

Solution 10 - Java

This could help:

public static String getCorporateID(String fileName) {

	String corporateId = null;

	try {
		corporateId = fileName.substring(0, fileName.indexOf("_"));
		// System.out.println(new Date() + ": " + "Corporate:
		// "+corporateId);
		return corporateId;
	} catch (Exception e) {
		corporateId = null;
		e.printStackTrace();
	}

	return corporateId;
}

Solution 11 - Java

  private String getTextBefore(final String wholeString, String before){
   final int indexOf = wholeString.indexOf(before); 
   if(indexOf != -1){
       return wholeString.substring(0, indexOf);
   }
   return wholeString;
}

Solution 12 - Java

I tried something like this,

String str = "abc.def.ghi";
String strBeforeFirstDot = str.substring(0, str.indexOf('.'));
// strBeforeFirstDot = "abc"

I tried for my example, to extract all char before @ sign in email to extract and provide a username.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionxyzView Question on Stackoverflow
Solution 1 - JavaSam BView Answer on Stackoverflow
Solution 2 - JavaChad SchougginsView Answer on Stackoverflow
Solution 3 - JavaTofuBeerView Answer on Stackoverflow
Solution 4 - JavaMax FichtelmannView Answer on Stackoverflow
Solution 5 - JavaUmer HayatView Answer on Stackoverflow
Solution 6 - JavaBohemianView Answer on Stackoverflow
Solution 7 - JavaVladiView Answer on Stackoverflow
Solution 8 - JavaSwagatikaView Answer on Stackoverflow
Solution 9 - JavaRandom42View Answer on Stackoverflow
Solution 10 - JavaVinod MoyalView Answer on Stackoverflow
Solution 11 - JavabeginnerView Answer on Stackoverflow
Solution 12 - JavaLiam BothamView Answer on Stackoverflow