Reputation:
I want to remove the last character from a string. I've tried doing this:
public String method(String str) {
if (str.charAt(str.length()-1)=='x'){
str = str.replace(str.substring(str.length()-1), "");
return str;
} else{
return str;
}
}
Getting the length of the string - 1 and replacing the last letter with nothing (deleting it), but every time I run the program, it deletes middle letters that are the same as the last letter.
For example, the word is "admirer"; after I run the method, I get "admie." I want it to return the word admire.
Upvotes: 610
Views: 1458693
Reputation: 4
Directly use trim() to remove character from last of string
String a=1,2,3,4,5,;
I want to remove last ,
a.trim(); It'll get the task done
Upvotes: -4
Reputation: 31647
Why not just one liner?
public static String removeLastChar(String str) {
return removeChars(str, 1);
}
public static String removeChars(String str, int numberOfCharactersToRemove) {
if(str != null && !str.trim().isEmpty()) {
return str.substring(0, str.length() - numberOfCharactersToRemove);
}
return "";
}
Full Code
public class Main
{
public static void main (String[] args) throws java.lang.Exception
{
String s1 = "Remove Last CharacterY";
String s2 = "Remove Last Character2";
String s3 = "N";
String s4 = null;
String s5 = "";
System.out.println("After removing s1==" + removeLastChar(s1) + "==");
System.out.println("After removing s2==" + removeLastChar(s2) + "==");
System.out.println("After removing s3==" + removeLastChar(s3) + "==");
System.out.println("After removing s4==" + removeLastChar(s4) + "==");
System.out.println("After removing s5==" + removeLastChar(s5) + "==");
}
public static String removeLastChar(String str) {
return removeChars(str, 1);
}
public static String removeChars(String str, int numberOfCharactersToRemove) {
if(str != null && !str.trim().isEmpty()) {
return str.substring(0, str.length() - numberOfCharactersToRemove);
}
return "";
}
}
Upvotes: 280
Reputation: 345
Since Java 8 you can use Optional to avoid null pointer exceptions and use functional programming:
public String removeLastCharacter(String string) {
return Optional.ofNullable(string)
.filter(str -> !str.isEmpty() && !string.isBlank())
.map(str -> str.substring(0, str.length() - 1))
.orElse(""); // Should be another value that need if the {@param: string} is "null"
}
Upvotes: 0
Reputation: 7486
this is well known problem solved beautifully in Perl via chop() and chomp()
long answer here : Java chop and chomp
here is the code :
//removing trailing characters
public static String chomp(String str, Character repl) {
int ix = str.length();
for (int i=ix-1; i >= 0; i-- ){
if (str.charAt(i) != repl) break;
ix = i;
}
return str.substring(0,ix);
}
//hardcut
public static String chop(String str) {
return str.substring(0,str.length()-1);
}
Upvotes: 0
Reputation: 863
if we want to remove file extension of the given file,
** Sample code
public static String removeNCharactersFromLast(String str,int n){
if (str != null && (str.length() > 0)) {
return str.substring(0, str.length() - n);
}
return "";
}
Upvotes: 1
Reputation: 341
Use StringUtils.Chop(Str) it also takes care of null and empty strings, u need to import common-io:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
Upvotes: -3
Reputation: 1193
How can a simple task be made complicated. My solution is:
public String removeLastChar(String s) {
return s[0..-1]
}
or
public String removeLastChar(String s) {
if (s.length() > 0) {
return s[0..-1]
}
return s
}
Upvotes: 3
Reputation: 107
string = string.substring(0, (string.length() - 1));
I'm using this in my code, it's easy and simple. it only works while the String is > 0. I have it connected to a button and inside the following if statement
if (string.length() > 0) {
string = string.substring(0, (string.length() - 1));
}
Upvotes: 8
Reputation: 23
Easy Peasy:
StringBuilder sb= new StringBuilder();
for(Entry<String,String> entry : map.entrySet()) {
sb.append(entry.getKey() + "_" + entry.getValue() + "|");
}
String requiredString = sb.substring(0, sb.length() - 1);
Upvotes: 0
Reputation: 63
I had to write code for a similar problem. One way that I was able to solve it used a recursive method of coding.
static String removeChar(String word, char charToRemove)
{
for(int i = 0; i < word.lenght(); i++)
{
if(word.charAt(i) == charToRemove)
{
String newWord = word.substring(0, i) + word.substring(i + 1);
return removeChar(newWord, charToRemove);
}
}
return word;
}
Most of the code I've seen on this topic doesn't use recursion so hopefully I can help you or someone who has the same problem.
Upvotes: 0
Reputation: 859
public String removeLastCharacter(String str){
String result = null;
if ((str != null) && (str.length() > 0)) {
return str.substring(0, str.length() - 1);
}
else{
return "";
}
}
Upvotes: 1
Reputation: 497
Suppose total length of my string=24 I want to cut last character after position 14 to end, mean I want starting 14 to be there. So I apply following solution.
String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
Upvotes: 0
Reputation: 32
just replace the condition of "if" like this:
if(a.substring(a.length()-1).equals("x"))'
this will do the trick for you.
Upvotes: 0
Reputation: 23037
Most answers here forgot about surrogate pairs.
For instance, the character 𝕫 (codepoint U+1D56B) does not fit into a single char
, so in order to be represented, it must form a surrogate pair of two chars.
If one simply applies the currently accepted answer (using str.substring(0, str.length() - 1)
, one splices the surrogate pair, leading to unexpected results.
One should also include a check whether the last character is a surrogate pair:
public static String removeLastChar(String str) {
Objects.requireNonNull(str, "The string should not be null");
if (str.isEmpty()) {
return str;
}
char lastChar = str.charAt(str.length() - 1);
int cut = Character.isSurrogate(lastChar) ? 2 : 1;
return str.substring(0, str.length() - cut);
}
Upvotes: 2
Reputation: 1571
In Kotlin you can used dropLast() method of the string class. It will drop the given number from string, return a new string
var string1 = "Some Text"
string1 = string1.dropLast(1)
Upvotes: 42
Reputation: 1
u can do i hereString = hereString.replace(hereString.chatAt(hereString.length() - 1) ,' whitespeace');
Upvotes: -2
Reputation: 357
// creating StringBuilder
StringBuilder builder = new StringBuilder(requestString);
// removing last character from String
builder.deleteCharAt(requestString.length() - 1);
Upvotes: 4
Reputation: 4967
Here's an answer that works with codepoints outside of the Basic Multilingual Plane (Java 8+).
Using streams:
public String method(String str) {
return str.codePoints()
.limit(str.codePoints().count() - 1)
.mapToObj(i->new String(Character.toChars(i)))
.collect(Collectors.joining());
}
More efficient maybe:
public String method(String str) {
return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}
Upvotes: 0
Reputation: 17
How to make the char in the recursion at the end:
public static String removeChar(String word, char charToRemove)
{
String char_toremove=Character.toString(charToRemove);
for(int i = 0; i < word.length(); i++)
{
if(word.charAt(i) == charToRemove)
{
String newWord = word.substring(0, i) + word.substring(i + 1);
return removeChar(newWord,charToRemove);
}
}
System.out.println(word);
return word;
}
for exemple:
removeChar ("hello world, let's go!",'l') → "heo word, et's go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"
Upvotes: 0
Reputation: 429
Java 8
import java.util.Optional;
public class Test
{
public static void main(String[] args) throws InterruptedException
{
System.out.println(removeLastChar("test-abc"));
}
public static String removeLastChar(String s) {
return Optional.ofNullable(s)
.filter(str -> str.length() != 0)
.map(str -> str.substring(0, str.length() - 1))
.orElse(s);
}
}
Output : test-ab
Upvotes: 1
Reputation: 12410
replace
will replace all instances of a letter. All you need to do is use substring()
:
public String method(String str) {
if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
str = str.substring(0, str.length() - 1);
}
return str;
}
Upvotes: 808
Reputation: 1057
The described problem and proposed solutions sometimes relate to removing separators. If this is your case, then have a look at Apache Commons StringUtils, it has a method called removeEnd which is very elegant.
Example:
StringUtils.removeEnd("string 1|string 2|string 3|", "|");
Would result in: "string 1|string 2|string 3"
Upvotes: 99
Reputation: 86875
Don't try to reinvent the wheel, while others have already written libraries to perform string manipulation:
org.apache.commons.lang3.StringUtils.chop()
Upvotes: 43
Reputation: 3333
As far as the readability is concerned, I find this to be the most concise
StringUtils.substring("string", 0, -1);
The negative indexes can be used in Apache's StringUtils utility. All negative numbers are treated from offset from the end of the string.
Upvotes: 11
Reputation: 4346
Why not use the escape sequence ... !
System.out.println(str + '\b');
Life is much easier now . XD ! ~ A readable one-liner
Upvotes: 0
Reputation: 7
This is the one way to remove the last character in the string:
Scanner in = new Scanner(System.in);
String s = in.nextLine();
char array[] = s.toCharArray();
int l = array.length;
for (int i = 0; i < l-1; i++) {
System.out.print(array[i]);
}
Upvotes: -2
Reputation: 6015
A one-liner answer (just a funny alternative - do not try this at home, and great answers already given):
public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
Upvotes: 2
Reputation: 21
// Remove n last characters
// System.out.println(removeLast("Hello!!!333",3));
public String removeLast(String mes, int n) {
return mes != null && !mes.isEmpty() && mes.length()>n
? mes.substring(0, mes.length()-n): mes;
}
// Leave substring before character/string
// System.out.println(leaveBeforeChar("Hello!!!123", "1"));
public String leaveBeforeChar(String mes, String last) {
return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
? mes.substring(0, mes.lastIndexOf(last)): mes;
}
Upvotes: 2
Reputation: 251
if you have special character like ; in json just use String.replace(";", "") otherwise you must rewrite all character in string minus the last.
Upvotes: 0