কোনও অক্ষর একটি স্ট্রিংয়ের মধ্যে উপস্থিত হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


208

জাভাতে এই শর্তটি পরীক্ষা করার একটি উপায় রয়েছে:

"এই একক অক্ষরটি কি স্ট্রিং x এ আদৌ উপস্থিত হয়"

একটি লুপ ব্যবহার না করে?


4
আপনি লুপগুলি এড়াতে চেষ্টা করছেন এমন কোনও বিশেষ কারণ আছে?
shstimer

2
আপনি লুপ ছাড়া চরিত্রটির জন্য সাধারণ অনুসন্ধান করতে পারবেন না। কীভাবে ট্যুরিং মেশিন কাজ করে তা দেখুন।
সালভাদোর ভ্যালেন্সিয়া

4
আমাদের ধরে নেওয়া উচিত @ বারফুন তাদের কোডে লুপটি চায় না। স্পষ্টতই যন্ত্রটি কোথাও একটি লুপ করে does নইলে প্রশ্নটি বাজে কথা।
ডাব্লুডাব্লু

আমি বলব জাভাটির স্ট্রিং ম্যানিপুলেশন বেশ সীমাবদ্ধ
এসিভি

উত্তর:


275

আপনি ব্যবহার করতে পারেন string.indexOf('a')

চরটি aউপস্থিত থাকলে string:

এটি এই বস্তুর দ্বারা প্রতিনিধিত্ব করা অক্ষর ক্রমের অক্ষরটির প্রথম উপস্থিতির সূচকটি, বা -1 অক্ষরটি উপস্থিত না হলে ফিরিয়ে দেয়।


8
কিন্তু সেই কলটির পিছনে সর্বদা একটি লুপ থাকে কারণ আপনি অন্যথায় কোনও চিহ্ন খুঁজে পাচ্ছেন না।
ভাবা

4
সূচিপত্র () অভ্যন্তরীণভাবে একটি লুপ ব্যবহার করে।
এমএমসিডোল

22
বারফুন যা চেয়েছিল তা নয়। বি এর কোডে লুপটি এড়াতে চায়। সমস্ত স্ট্রিং প্রচুর দরকারী পদ্ধতি সহ একটি দুর্দান্ত ক্লাসে আবৃত অক্ষরের একটি অ্যারে হবার পরে স্বাভাবিকভাবেই এপিআই-র একটি লুপ করা দরকার।
এমপি।

5
এই উত্তরগুলি এতগুলি উপার্জন কিভাবে পাচ্ছে? indexOf()অভ্যন্তরীণভাবে লুপ ব্যবহারের সমাধানগুলি । উত্তরের কোনওটিই সঠিক সমাধান দেয় না এবং যদি কেউ নতুন প্রশ্ন জিজ্ঞাসা করার সাহস করে তবে লোকেরা তা ঘোষণা করে Duplicate। সত্যিই হতাশাবোধ; (
প্রশান্ত প্রভাকর সিং

4
@ প্রশান্তপ্রভাকারসিংহ আমি লুপ ছাড়াই কীভাবে এটি করা যায় তা দেখছি না। একটি স্ট্রিং কমবেশি অক্ষরের একটি গ্রুপ। যদি এটি একটি গোষ্ঠী (সংগ্রহ, অ্যারে, ইত্যাদি) হয় তবে তা স্থানীয় কোডের অভ্যন্তরীণ বা বাহ্যিক বিষয় নয়, আমি আশা করব যে "গোষ্ঠী" এর মধ্যে কিছু খুঁজে পেতে আপনার একটি লুপের প্রয়োজন হবে। আমি বিশ্বাস করি "লুপ ব্যবহার না করে?" "আমার নিজের লুপ না লিখে?" এর মতো আরও কি?
টাইলার

144
  • String.contains() স্ট্রিংটিতে চর মানগুলির একটি নির্দিষ্ট ক্রম রয়েছে কিনা তা যাচাই করে
  • String.indexOf() যা নির্দিষ্ট অক্ষর বা সাবস্ট্রিংয়ের প্রথম উপস্থিতির স্ট্রিংয়ের মধ্যে সূচকটি প্রদান করে (এই পদ্ধতির 4 টি ভিন্নতা রয়েছে)

15
একটি চর একটি CharSequence না করে তাই এটি স্ট্রিং.কন্টেনস (চারসেকেন্স) এ দেওয়া যায় না।
এমপি।

28
একক চরের সাথে স্ট্রিং.কন্টেইনস () ব্যবহার করার জন্য এটি করুন:
স্ট্রিংকন্টেনস

7
বা যদি আপনি সংক্ষিপ্ত কোড পছন্দ করেন তবে এটি করুন:String.contains(""+c)
ফেলিক্স নিউমায়ার

31

আমি নিশ্চিত নই যে আসল পোস্টারটি ঠিক কী জিজ্ঞাসা করছে। IndexOf মধ্যে (...) এবং যেহেতু রয়েছে (...) উভয় সম্ভবত অভ্যন্তরীণভাবে loops ব্যবহার, হয়তো সে যদি এই একটি লুপ ছাড়া এ সব সম্ভব কিনা দেখতে খুঁজছে? আমি হাতছাড়া করার দুটি উপায় সম্পর্কে ভাবতে পারি, একটি অবশ্যই অবশ্যই পুনরাবৃত্তি হবে:

public boolean containsChar(String s, char search) {
    if (s.length() == 0)
        return false;
    else
        return s.charAt(0) == search || containsChar(s.substring(1), search);
}

অন্যটি কম মার্জিত, তবে সম্পূর্ণতা ...:

/**
 * Works for strings of up to 5 characters
 */
public boolean containsChar(String s, char search) {
    if (s.length() > 5) throw IllegalArgumentException();

    try {
        if (s.charAt(0) == search) return true;
        if (s.charAt(1) == search) return true;
        if (s.charAt(2) == search) return true;
        if (s.charAt(3) == search) return true;
        if (s.charAt(4) == search) return true;
    } catch (IndexOutOfBoundsException e) {
        // this should never happen...
        return false;
    }
    return false;
}

অবশ্যই দীর্ঘতর ও দীর্ঘতর স্ট্রিংগুলির সমর্থন করার জন্য লাইনের সংখ্যা বাড়ছে grow তবে মোটে কোনও লুপ / ​​পুনরাবৃত্তি নেই। আপনি যদি দৈর্ঘ্যের () লুপটি ব্যবহার করেন সে সম্পর্কে উদ্বিগ্ন থাকেন তবে দৈর্ঘ্য পরীক্ষাটিও সরাতে পারেন।


10
যদি আপনি পুনরুক্তিটিকে একটি নন-লুপ প্রক্রিয়া হিসাবে সংজ্ঞায়িত করেন তবে সৃজনশীল হওয়ার জন্য আপনি একজন গিফিক: ডি +1।
গেরদা

1
এটি 5 এর হার্ড কোডিং দৈর্ঘ্যের জন্য ভাল Otherwise নাহলে অক্ষরটির সন্ধানের জন্য লুপ করার দরকার। পেডেন্টিক হওয়ার জন্য নয়, এর প্রমাণটি একটি টুরিং মেশিনের সংজ্ঞা দ্বারা প্রদর্শিত হয়। একটি গণনামূলক ডিভাইসের ভিত্তি।
সালভাদোর ভ্যালেন্সিয়া

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

12
String temp = "abcdefghi";
if(temp.indexOf("b")!=-1)
{
   System.out.println("there is 'b' in temp string");
}
else
{
   System.out.println("there is no 'b' in temp string");
}

1
এটি কি গৃহীত উত্তরের হুবহু নকল নয় ?, আমরা আপনার প্রয়াসকে স্বীকার করি তবে আপনার কিছু উত্তর না দেওয়া প্রশ্ন সন্ধান করার এবং সেগুলির উত্তর দেওয়ার চেষ্টা করা উচিত।
শেখর_প্রো

7

আপনি Stringক্লাস থেকে 2 টি পদ্ধতি ব্যবহার করতে পারেন ।

  • String.contains() স্ট্রিংটিতে চর মানগুলির একটি নির্দিষ্ট ক্রম রয়েছে কিনা তা যাচাই করে
  • String.indexOf() যা নির্দিষ্ট অক্ষরের প্রথম উপস্থিতির স্ট্রিংয়ের মধ্যে সূচকটি ফেরত দেয় বা অক্ষরটি পাওয়া না গেলে -1 প্রদান করে (এই পদ্ধতির 4 টি ভিন্নতা রয়েছে)

পদ্ধতি 1:

String myString = "foobar";
if (myString.contains("x") {
    // Do something.
}

পদ্ধতি 2:

String myString = "foobar";
if (myString.indexOf("x") >= 0 {
    // Do something.
}

লিঙ্কগুলি: জাচ স্ক্রিভেনা


4

কোনও স্ট্রিংয়ে কিছু বিদ্যমান নেই কিনা তা পরীক্ষা করতে আপনার কমপক্ষে স্ট্রিংয়ের প্রতিটি চরিত্রের দিকে নজর দেওয়া উচিত। সুতরাং আপনি যদি স্পষ্টভাবে একটি লুপ ব্যবহার না করেন তবে এর দক্ষতাও একই থাকবে। বলা হচ্ছে, আপনি str.contains ("" + চর) ব্যবহার করে দেখতে পারেন।


একমত। কোথাও কোথাও কারও কারও কাছে এটি করার জন্য একটি লুপ তৈরি করা দরকার। ভাগ্যক্রমে জাভা এপিআই এটি করে বা আমাদের কোডটি খুব বিশৃঙ্খল হবে!
ফোরটিয়ার্নার

4

আপনার যদি একই স্ট্রিংটি প্রায়শই পরীক্ষা করতে হয় তবে আপনি অক্ষরের উপস্থিতিগুলি আপ-ফ্রন্ট গণনা করতে পারেন। এটি এমন একটি বাস্তবায়ন যা দীর্ঘ অ্যারেতে থাকা কিছুটা অ্যারে ব্যবহার করে:

public class FastCharacterInStringChecker implements Serializable {
private static final long serialVersionUID = 1L;

private final long[] l = new long[1024]; // 65536 / 64 = 1024

public FastCharacterInStringChecker(final String string) {
    for (final char c: string.toCharArray()) {
        final int index = c >> 6;
        final int value = c - (index << 6);
        l[index] |= 1L << value;
    }
}

public boolean contains(final char c) {
    final int index = c >> 6; // c / 64
    final int value = c - (index << 6); // c - (index * 64)
    return (l[index] & (1L << value)) != 0;
}}

আমার অনুরূপ সমস্যার বিষয়ে আমি আপনার সমাধান চেষ্টা করেছি। আমার নিকটতম সমাধানটি স্ট্রিং 1 দৈর্ঘ্যের 63 ক এবং স্ট্রিং 2 দৈর্ঘ্যের 95 কে-এর 1500 মিলিসেকেন্ডেরও বেশি ছিল। আপনার সমাধানটি 3-5 মিলিসেকেন্ডে ফলাফল ছড়িয়ে দেয়। একটি ব্যাখ্যা অন্তর্ভুক্ত করতে দয়া করে আপনার সমাধানটি সম্পাদনা করতে পারেন? অনুগ্রহ?
ভাইরেল ফ্লোরিয়ান


1
package com;
public class _index {

    public static void main(String[] args) {
        String s1="be proud to be an indian";
        char ch=s1.charAt(s1.indexOf('e'));
        int count = 0; 
        for(int i=0;i<s1.length();i++) {
            if(s1.charAt(i)=='e'){
                System.out.println("number of E:=="+ch);
                count++;
            }
        }
        System.out.println("Total count of E:=="+count);
    }
}

2
এবং forএখন একটি লুপ না?
মাইন্ডউইন

0
String s="praveen";
boolean p=s.contains("s");
if(p)
    System.out.println("string contains the char 's'");
else
    System.out.println("string does not contains the char 's'");

আউটপুট

string does not contains the char 's'

আগে একই উত্তর দেওয়া হয়েছে।
সার্ভ বেলভ

0
static String removeOccurences(String a, String b)
{
    StringBuilder s2 = new StringBuilder(a);

    for(int i=0;i<b.length();i++){
        char ch = b.charAt(i);  
        System.out.println(ch+"  first index"+a.indexOf(ch));

        int lastind = a.lastIndexOf(ch);

    for(int k=new String(s2).indexOf(ch);k > 0;k=new String(s2).indexOf(ch)){
            if(s2.charAt(k) == ch){
                s2.deleteCharAt(k);
        System.out.println("val of s2 :             "+s2.toString());
            }
        }
      }

    System.out.println(s1.toString());

    return (s1.toString());
}

এখানে আমরা স্ট্রিং এ-তে উপস্থিত প্রতিটি চরিত্রের উপস্থিতি এবং চরিত্রগুলি মুছে ফেলার জন্য সন্ধান করছি।
গণেশমণি

0
you can use this code. It will check the char is present or not. If it is present then the return value is >= 0 otherwise it's -1. Here I am printing alphabets that is not present in the input.

import java.util.Scanner;

public class Test {

public static void letters()
{
    System.out.println("Enter input char");
    Scanner sc = new Scanner(System.in);
    String input = sc.next();
    System.out.println("Output : ");
    for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
            if(input.toUpperCase().indexOf(alphabet) < 0) 
                System.out.print(alphabet + " ");
    }
}
public static void main(String[] args) {
    letters();
}

}

//Ouput Example
Enter input char
nandu
Output : 
B C E F G H I J K L M O P Q R S T V W X Y Z

0

আপনি যা খুঁজছিলেন নীচে তা কি?

int index = string.indexOf(character);
return index != -1 && string.lastIndexOf(character) != index;

আপনার কেন আছে && string.lastIndexOf(character) != index
গ্রিনএজজেড

-1

লুপ / ​​পুনরাবৃত্তি (একবারে ইনডেক্স-এর মতো অন্তর্নির্মিত পদ্ধতিগুলিও একটি লুপ ব্যবহার করে) একবারে স্ট্র্যাপের উপর দিয়ে সর্বনিম্ন স্ট্রিং না করে চরটি কিছু স্ট্রিংয়ের মধ্যে উপস্থিত হয়েছে কিনা তা আপনি দেখতে পারবেন না)

যদি না। আপনি যখন চার্চটি x এর স্ট্রিং x তে থাকেন তখন স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে আরও অনেক বেশি উপায় আমি সেট ডেটার কাঠামো ব্যবহার করার পরামর্শ দিই যা কেবল ব্যবহারের চেয়ে আরও কার্যকর হবেindexOf

String s = "abc";

// Build a set so we can check if character exists in constant time O(1)
Set<Character> set = new HashSet<>();
int len = s.length();
for(int i = 0; i < len; i++) set.add(s.charAt(i));

// Now we can check without the need of a loop
// contains method of set doesn't use a loop unlike string's contains method
set.contains('a') // true
set.contains('z') // false

সেট ব্যবহার করে আপনি স্থির সময় ও (1) এর স্ট্রিংগুলিতে অক্ষরটি বিদ্যমান কিনা তা পরীক্ষা করতে সক্ষম হবেন তবে আপনি অতিরিক্ত মেমরিও ব্যবহার করবেন (স্পেস জটিলতা ও (এন)) হবে।


-3

আমি স্ট্রিং.সিন্ড () পদ্ধতিটি এর জন্য ব্যবহার করেছি যা স্ট্রিং বা চরিত্রের সন্ধান পেলে সত্য বা মিথ্যা প্রত্যাবর্তন করে। নীচের ডকুমেন্টেশন দেখুন।

https://www.w3schools.com/jsref/jsref_includes.asp


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
অ্যাড্রিয়ানো মার্টিনস

2
এই উত্তরটি জাভাস্ক্রিপ্টের জন্য, প্রশ্নটি জাভাতে বিশেষভাবে বলেছে
হাজেম ফারাহাত

-4

// এটি কেবলমাত্র প্রধান ... আপনি উইথ বাফার রিডার বা স্ক্যানার ব্যবহার করতে পারেন

string s;
int l=s.length();
int f=0;
for(int i=0;i<l;i++)
   {
      char ch1=s.charAt(i); 
      for(int j=0;j<l;j++)
         {
          char ch2=charAt(j);
          if(ch1==ch2)
           {
             f=f+1;
             s.replace(ch2,'');
           }
          f=0;
          }
     }
//if replacing with null does not work then make it space by using ' ' and add a if condition on top.. checking if its space if not then only perform the inner loop... 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.