As mentioned by Scary Wombat, substring(position)
is inclusive, and therefore s.substring(s.lastIndexOf("@"));
will return substring containing '@'
char.
Some extra note is that there are be many edge cases for which your code will fail, for example null
string, string that does not contain '@'
etc.
See suggestion code that tries to catch all edge cases, with test
@Test
public void testGetSubString(){
final String constant = "gmail";
final String input1 = "test@gmail.com";
final String input2 = "t.est@gmail.com";
final String input3 = "test@@gmail.com";
final String input4ShouldBeNull = "test@gmailcom";
final String input5ShouldBeNull = "test@.gmailcom";
final String input6ShouldBeNull = "";
final String input7ShouldBeNull = null;
final String input8ShouldBeNull = "gmail.com";
assertEquals(constant, getSubString(input1));
assertEquals(constant, getSubString(input2));
assertEquals(constant, getSubString(input3));
assertNull(constant, getSubString(input4ShouldBeNull));
assertNull(constant, getSubString(input5ShouldBeNull));
assertNull(constant, getSubString(input6ShouldBeNull));
assertNull(constant, getSubString(input7ShouldBeNull));
assertNull(constant, getSubString(input8ShouldBeNull));
}
public String getSubString(final String input) {
if(input == null) {
return null;
}
final int indexOfAt = input.lastIndexOf('@');
if(input.isEmpty() || indexOfAt < 0 || indexOfAt >= input.length()-2) {
return null;
}
String suffix = input.substring(indexOfAt + 1);
final int indexOfDot = suffix.indexOf('.');
if(indexOfDot < 1) {
return null;
}
return suffix.substring(0, indexOfDot);
}