কোনও স্ট্রিং থেকে শেষ চরিত্রটি কীভাবে সরিয়ে নেওয়া যায়?


483

আমি একটি স্ট্রিং থেকে শেষ চরিত্রটি সরাতে চাই। আমি এটি করার চেষ্টা করেছি:

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;
    }
}

স্ট্রিংয়ের দৈর্ঘ্য পাওয়া - 1 এবং শেষ অক্ষরটি কিছুই দিয়ে (এটি মুছে ফেলা) প্রতিস্থাপন করা হয়, তবে প্রতিবারই আমি প্রোগ্রামটি চালাচ্ছি, এটি মাঝের অক্ষরগুলি মুছে ফেলবে যা শেষ অক্ষরের মতোই।

উদাহরণস্বরূপ, শব্দটি "প্রশংসক"; আমি পদ্ধতিটি চালানোর পরে, আমি "অ্যাডমি" পাই। আমি এটি শব্দ প্রশংসিত ফিরে আসতে চান।

উত্তর:


665

replaceএকটি চিঠির সমস্ত দৃষ্টান্ত প্রতিস্থাপন করবে। আপনাকে যা করতে হবে তা হ'ল 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;
}

7
আমি null != str && চেকের শুরুতে যুক্ত করব ।
জেমস ওরাভেক

12
মানে str != null &&!
এসএসপোক

2
@SSpoke একই জিনিস, পুলিশের শুধু একটু সুন্দর হয় পড়তে :)
মার্কো

6
@ মারকো হ্যাঁ হ্যাঁ যেহেতু এটি স্ট্যান্ডার্ড, লোকেরা যখন তাদের নিজস্ব জিনিসপত্র তৈরি করে তখন অদ্ভুত লাগে।
এসএসপোক

26
@ অ্যাডাম জেনসেন সি-তে আপনি দুর্ঘটনাক্রমে লিখতে পারেন if (str = NULL)যা কেবল সর্বদা মিথ্যা (NULL == 0 == মিথ্যা) মূল্যায়ন করবে না তবে এমন একটি মানও নির্ধারণ করবে strযা সম্ভবত আপনি যা করতে চেয়েছিলেন তা নয়। আপনি if (NULL = str)তবে লিখতে পারেন নি কারণ NULL একটি পরিবর্তনশীল নয় এবং এর জন্য নির্ধারিত হতে পারে না। সুতরাং, বাম দিকে NUL লাগানো একটি নিরাপদ সম্মেলন। এটি জাভাতে কোনও সমস্যা নয়।
জ্ঞান ওরফে গ্যারি বুইন

236

কেন শুধু একটি লাইনার নয়?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

সম্পূর্ণ কোড

import java.util.*;
import java.lang.*;

public class Main {
    public static void main (String[] args) throws java.lang.Exception {
        String s1 = "Remove Last CharacterY";
        String s2 = "Remove Last Character2";
        System.out.println("After removing s1==" + removeLastChar(s1) + "==");
        System.out.println("After removing s2==" + removeLastChar(s2) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}

ডেমো


8
নাল এবং ফাঁকা স্ট্রিংয়ের চেকটি বিবেচনা করা উচিত .. @ বিবিসোবিও সংস্করণ আরও ভাল
কেডিজেভা

1
@ কেডিজাভা: বৈধ স্ট্রিংটি পাস হয়েছে তা বিবেচনা করে উপরে valid অন্যথায় আমাকে স্ট্রিংটি সঠিক কিনা তা পরীক্ষা করার জন্য
ট্রাই

আমি return str.substring(0,str.length()-1);উন্নতির আগে নাল স্ট্রিংয়ের জন্য চেক যোগ করেছি
শরিফ

ধন্যবাদ এই উত্সটি gist.github.com/CrandellWS/e254a215c54aa4be0400a3511a23f730
CrandellWS

@ ফাহিমপারকার: কারণ এটি সম্ভবত সম্ভব হতে পারে যে আমরা শেষ চরিত্রটি মুছে ফেলতে চাই না। তবে প্রশ্ন অনুসারে, আপনার উত্তরটি সঠিক
আশ

91

যেহেতু আমরা কোনও বিষয়ে আছি, কেউ নিয়মিত প্রকাশও ব্যবহার করতে পারেন

"aaabcd".replaceFirst(".$",""); //=> aaabc  

3
দুর্দান্ত উপায়, যখন আপনি স্ট্রিংয়ের শেষে থেকে ঠিক কীটি ছাঁটাতে চান তা নির্ধারণ করতে চান, কেবল এক্স যাই হোক না কেন
জুলিয়েন

73

বর্ণিত সমস্যা এবং প্রস্তাবিত সমাধানগুলি কখনও কখনও বিভাজকগুলি সরানোর সাথে সম্পর্কিত। যদি এটি আপনার ক্ষেত্রে হয় তবে অ্যাপাচি কমন্স স্ট্রিংআপিলগুলি দেখুন, এটিতে একটি অপসারণ পদ্ধতি বলা আছে যা খুব মার্জিত।

উদাহরণ:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

ফলাফল: "স্ট্রিং 1 | স্ট্রিং 2 | স্ট্রিং 3"


পূর্বোক্ত স্ট্রিং ইউটিলের জন্য জার এখানে রয়েছে: commons.apache.org/proper/commons-lang/download_lang.cgi
টনি এইচ।

47
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}

4
যদি শেষ চরিত্রটি একটি উচ্চ / নিম্ন সারোগেট জুটি হয়?
রবার্ট অ্যালান হেননিগান লেহে

@ রবার্ট অ্যালানহেনিগানলাহী আমি একটি উত্তর পোস্ট করেছি যা সেই পরিস্থিতিতে পরিচালনা করে।
প্যাট্রিক পার্কার

33

চাকাটি পুনরায় উদ্ভাবনের চেষ্টা করবেন না, অন্যরা স্ট্রিং ম্যানিপুলেশন সম্পাদনের জন্য ইতিমধ্যে লাইব্রেরি লিখেছেন: org.apache.commons.lang3.StringUtils.chop()


2
আপনি যদি কেবলমাত্র শেষ চরিত্রটি সরাতে চান - এটি সেরা উত্তর!
iafork

না এটি নয়, কারণ "জাভা ব্যবহার করুন" কোনও কোটলিন প্রশ্নের ভয়ানক উত্তর।
মিক্কেল লাক্কে

2
@ মিক্কেললুককে আমি জানি না, তবে এই প্রশ্নটি কোনও অবস্থাতেই কোটলিন প্রশ্ন নয় ??
membersound

19

এটা ব্যবহার কর:

 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }

11
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

উদাহরণস্বরূপ, শব্দটি "প্রশংসক"; আমি পদ্ধতিটি চালানোর পরে, আমি "অ্যাডমি" পাই। আমি এটি শব্দ প্রশংসিত ফিরে আসতে চান।

আপনি যদি ইংরেজি শব্দগুলি স্টেম করার চেষ্টা করছেন

স্টেমিং হ'ল শব্দগুলি তাদের স্টেম, বেস বা মূল ফর্মের প্রতিবিম্বিত (বা কখনও কখনও প্রাপ্ত) কমানোর প্রক্রিয়া — সাধারণত একটি লিখিত শব্দ ফর্ম form

...

উদাহরণস্বরূপ, ইংরেজির একটি স্টেমারকে "বিড়াল" (এবং সম্ভবত "ক্যাটলাইক", "কট্টি" ইত্যাদি) মূলটি "বিড়াল", এবং "স্টেমার", "স্টেমিং", "স্টেম্মড" এর উপর ভিত্তি করে স্ট্রিংটি সনাক্ত করতে হবে "স্টেম" এর উপর ভিত্তি করে স্টেমিং অ্যালগরিদম "ফিশিং", "ফিশড", "ফিশ" এবং "ফিশার" শব্দের মূল শব্দ "ফিশ" হ্রাস করে।

লুসিন স্টেমারগুলির মধ্যে পার্থক্য: ইংলিশস্টেমমার, পোর্টারস্টেমার, লোভিনস স্টেমার কিছু জাভা বিকল্পের রূপরেখা দেয়।


11

কোটলিনে আপনি স্ট্রিং ক্লাসের ড্রপলাস্ট () পদ্ধতিটি ব্যবহার করতে পারেন। এটি স্ট্রিং থেকে প্রদত্ত নম্বরটি ফেলে দেবে, একটি নতুন স্ট্রিং ফিরে আসবে

var string1 = "Some Text"
string1 = string1.dropLast(1)

9

যতদূর পঠনযোগ্যতা সম্পর্কিত, আমি এটি সবচেয়ে সংক্ষিপ্ত বলে মনে করি

StringUtils.substring("string", 0, -1);

নেতিবাচক সূচকগুলি অ্যাপাচি-এর স্ট্রিংআপিলস ইউটিলিটিতে ব্যবহার করা যেতে পারে। সমস্ত নেতিবাচক সংখ্যাগুলি স্ট্রিংয়ের শেষে থেকে অফসেট থেকে চিকিত্সা করা হয়।


সরলতার জন্য org.apache.commons.lang.StringUtils.chop () পদ্ধতি ব্যবহারের জন্য - আমি এটি সেরা উত্তর বলব না। তবুও, -1 এর কৌশলটি সত্যিই দুর্দান্ত এবং অন্যান্য উত্তরগুলির দিকে তাকানো সত্যই ব্যবহৃত হয়নি / সুপরিচিত।
iafork

4

'এক্সএক্সএক্সএক্স' এর শেষ ঘটনাটি সরিয়ে দেয়:

    System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));

'এক্সএক্সএক্সএক্স' এর শেষ ঘটনাটি যদি শেষ হয় তবে সরিয়ে দেয়:

    System.out.println("aaa xxx aaa  ".replaceAll("xxx\\s*$", ""));

আপনি যা চান তার উপর 'xxx' প্রতিস্থাপন করতে পারেন তবে বিশেষ অক্ষরে নজর রাখুন


4
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);


3

স্ট্রিংবিল্ডার শ্রেণীর দিকে তাকান:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"

2
// 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;
}

2

একটি ওয়ানলাইনার উত্তর (কেবল একটি মজাদার বিকল্প - এটি বাড়িতে চেষ্টা করবেন না এবং দুর্দান্ত উত্তর ইতিমধ্যে দেওয়া হয়েছে):

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}

2

পলায়ন ক্রমটি কেন ব্যবহার করবেন না ...!

System.out.println(str + '\b');

জীবন এখন অনেক সহজ। এক্সডি! Read একটি পঠনযোগ্য ওয়ান-লাইনার


এই জাভা না? LMAO এর
baranskistad

স্ট্রিং রিডার, টেক্সট টার্মিনাল ইত্যাদি দ্বারা '\ বি' এর বিশেষ আচরণ ব্যাখ্যা করা হয় otherwise stackoverflow.com/a/11891895/4589003
সুদীপ ভান্ডারী

2

এখানে বেশিরভাগ উত্তর surrogate জোড়া সম্পর্কে ভুলে গেছে

উদাহরণস্বরূপ, অক্ষর 𝕫 (কোডপয়েন্ট ইউ + 1D56B) একক মধ্যে খাপ খায় না char তাই প্রতিনিধিত্ব করতে, এটি অবশ্যই দুটি একটি সারোগেট জুটি গঠন করতে হবে।

যদি কেউ কেবল বর্তমানে গৃহীত উত্তর প্রয়োগ করে (ব্যবহার করে) str.substring(0, str.length() - 1) , কেউ সারোগেট জোড়ায় বিভক্ত করে, অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যায়)।

শেষের অক্ষরটি একটি সারোগেট জুটি কিনা তা যাচাই করে নেওয়া উচিত:

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);
}

কোন এক ক্ষেত্রে: এটি কি কখনও ফেলতে পারে IndexOutOfBoundsException? (উদাহরণস্বরূপ, ক্যারেক্টার.আইসুরোগেট সত্য হয় যখন এটির আগে আসলে কোনও চর নেই, making str.length()-cutণাত্মক করা সম্ভব)।
জিপিআই

হ্যাঁ, এটা সম্ভব এটি যাইহোক একটি অবৈধ স্ট্রিং, তবে এখনও - এটি সম্ভব, হ্যাঁ। তারপরে একটি প্রতিস্থাপন 2করা উচিত Math.min(2, str.length())
এমসি সম্রাট

1

জাভা 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);
    }
}

আউটপুট: পরীক্ষা-আব


1
 "String name" = "String name".substring(0, ("String name".length() - 1));

আমি এটি আমার কোডটিতে ব্যবহার করছি, এটি সহজ এবং সহজ। এটি শুধুমাত্র কাজ করে স্ট্রিং থাকাকালীন> 0. আমি এটা নিম্নলিখিত একটি বাটন এবং ভিতরে সংযুক্ত আছে কি যদি বিবৃতি

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}


0

আপনার মত যদি বিশেষ চরিত্র থাকে; জসনে কেবল স্ট্রিং.রেপ্লেস (";", "") ব্যবহার করুন অন্যথায় আপনাকে অবশ্যই সর্বশেষে স্ট্রিং বিয়োগে সমস্ত অক্ষর পুনরায় লিখতে হবে।


0

শেষে পুনরাবৃত্তিতে চরটি কীভাবে তৈরি করবেন:

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;
    }

উদাহরণ স্বরূপ:

removeChar ("hello world, let's go!",'l')  "heo word, et's go!llll"
removeChar("you should not go",'o')  "yu shuld nt goooo"

0

এখানে একটি উত্তর যা বুনিয়াদি বহুভাষিক সমতল (জাভা 8+) এর বাইরে কোডপয়েন্টগুলির সাথে কাজ করে।

স্ট্রিম ব্যবহার করে:

public String method(String str) {
    return str.codePoints()
            .limit(str.codePoints().count() - 1)
            .mapToObj(i->new String(Character.toChars(i)))
            .collect(Collectors.joining());
}

আরও দক্ষ হতে পারে:

public String method(String str) {
    return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}

0

আমরা সাবস্ট্রিং ব্যবহার করতে পারি। এখানে উদাহরণ,

public class RemoveStringChar 
{
    public static void main(String[] args) 
    {   
        String strGiven = "Java";
        System.out.println("Before removing string character - " + strGiven);
        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
    }

    public static String removeCharacter(String strRemove, int position)
    {   
        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
    }
}


0

ধরুন আমার স্ট্রিংয়ের মোট দৈর্ঘ্য = 24 আমি শেষের অক্ষরটি 14 অবস্থানের পরে কাটাতে চাই, এর অর্থ আমি সেখানে 14 হওয়া শুরু করতে চাই। সুতরাং আমি নিম্নলিখিত সমাধান প্রয়োগ।

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);

0

অনুরূপ সমস্যার জন্য আমাকে কোড লিখতে হয়েছিল। আমি এটি সমাধান করতে সক্ষম হয়েছি এমন এক উপায়ে কোডিংয়ের পুনরাবৃত্ত পদ্ধতি ব্যবহৃত হয়েছিল।

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;
}

আমি এই বিষয়টিতে দেখেছি বেশিরভাগ কোড পুনরাবৃত্তি ব্যবহার করে না তাই আশা করি আমি আপনাকে বা একই সমস্যা আছে এমন কাউকে সহায়তা করতে পারি।


0

সহজ কিছু:

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);

-1

স্ট্রিংয়ের শেষ অক্ষরটি মুছে ফেলার এটিই এক উপায়:

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]);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.