मैं इंट से स्ट्रिंग में कैसे परिवर्तित करूं?


745

मैं एक ऐसी परियोजना पर काम कर रहा हूँ, जहाँ से सभी रूपांतरण इस तरह से किए intजा Stringरहे हैं:

int i = 5;
String strI = "" + i;

मैं जावा से परिचित नहीं हूँ।

क्या यह सामान्य अभ्यास है या कुछ गलत है, जैसा कि मुझे लगता है?


47
"मूर्ख, आसान" रास्ता स्ट्रिंग = "" + पूर्णांक है;
फेटी

1
अच्छा दस्तावेज: [ javarevisited.blogspot.de/2011/08/… उदाहरण
नारायण येराबाचु

2
मेरा बस मतलब था, यह एक "त्वरित, सरल" तरीका है। यह थोड़ा मूर्खतापूर्ण है लेकिन यह काम करता है!
फेटी

1
मेरे एक सहयोगी ने किया Integer.valueOf(i).toString()। वह वस्तुओं का शौकीन रहा होगा। हालांकि यह बहुत स्पष्ट रूप से उसका इरादा बताता है, यह मेरे स्वाद के लिए थोड़ा लंबा है।
ओले वीवी

5
आपको कोड की केवल 45 लाइनें चाहिए, और इसे करने के लिए 7 इंटरफेस को लागू करना होगा।
स्कै

जवाबों:


958

सामान्य तरीके Integer.toString(i)या होंगे String.valueOf(i)

संघ कार्य करेगा, लेकिन यह अपरंपरागत है और यह एक बुरा गंध हो सकता है क्योंकि यह सुझाव देता है कि लेखक ऊपर दिए गए दो तरीकों के बारे में नहीं जानता है (और क्या वे नहीं जान सकते हैं?)।

जावा के पास तार के साथ उपयोग किए जाने पर + ऑपरेटर के लिए विशेष समर्थन होता है ( प्रलेखन देखें ) जो आपके द्वारा पोस्ट किए गए कोड का अनुवाद करता है:

StringBuilder sb = new StringBuilder();
sb.append("");
sb.append(i);
String strI = sb.toString();

संकलन-समय पर। यह थोड़ा कम कुशल है ( sb.append()कॉलिंग समाप्त होता है Integer.getChars(), जो कि Integer.toString()वैसे भी होता है), लेकिन यह काम करता है।

ग्रोग्रिगेज की टिप्पणी का जवाब देने के लिए: ** नहीं, कंपाइलर इस मामले में खाली स्ट्रिंग का अनुकूलन नहीं करता है - देखो:

simon@lucifer:~$ cat TestClass.java
public class TestClass {
  public static void main(String[] args) {
    int i = 5;
    String strI = "" + i;
  }
}
simon@lucifer:~$ javac TestClass.java && javap -c TestClass
Compiled from "TestClass.java"
public class TestClass extends java.lang.Object{
public TestClass();
  Code:
   0:    aload_0
   1:    invokespecial    #1; //Method java/lang/Object."<init>":()V
   4:    return

public static void main(java.lang.String[]);
  Code:
   0:    iconst_5
   1:    istore_1

स्ट्रींगबुइर्स्टाइल को प्रारंभिक करें:

   2:    new    #2; //class java/lang/StringBuilder
   5:    dup
   6:    invokespecial    #3; //Method java/lang/StringBuilder."<init>":()V

खाली स्ट्रिंग संलग्न करें:

   9:    ldc    #4; //String
   11:    invokevirtual    #5; //Method java/lang/StringBuilder.append:
(Ljava/lang/String;)Ljava/lang/StringBuilder;

पूर्णांक को जोड़ें:

   14:    iload_1
   15:    invokevirtual    #6; //Method java/lang/StringBuilder.append:
(I)Ljava/lang/StringBuilder;

अंतिम स्ट्रिंग निकालें:

   18:    invokevirtual    #7; //Method java/lang/StringBuilder.toString:
()Ljava/lang/String;
   21:    astore_2
   22:    return
}

नहीं है एक प्रस्ताव और चल रहे काम इस व्यवहार, JDK 9 के लिए लक्षित बदलने के लिए।


9
jv में jit कंपाइलर के बारे में क्या? :-) javac कोई फैंसी अनुकूलन नहीं करता है।
पीटर 13:tibraný

5
कौन जानता है :) javac का अनुकूलन भाव इस तरह जब संख्यात्मक शाब्दिक उपयोग किया जाता है, हालांकि (जैसे करता है "" + 5हो जाता है "5")।
सिमोनजे

5
हाँ, लेकिन आप "" + 5सिर्फ के बजाय क्यों करेंगे "5"?
ग्रुंगोंडोला

3
अच्छा! +1 और वे क्या नहीं जानते हैं?
Sain16ошƒаӽ

2
"" + integerदृष्टिकोण में प्रयोग किया जाता है सरकारी ओरेकल ट्यूटोरियल में से एक
टॉमाज़ नोकोń

252

यह स्वीकार्य है, लेकिन मैंने कभी ऐसा कुछ नहीं लिखा। मैं इसे पसंद करूंगा:

String strI = Integer.toString(i);

101
मैं String.valueOf दृष्टिकोण पसंद करता हूं, क्योंकि आप किसी भी प्रकार के लिए एक ही कॉल का उपयोग कर सकते हैं।
जॉन स्कीट

1
नंबरफार्मर एक बेहतर दृष्टिकोण होगा
कस्तूरी

एक अच्छा जवाब, कस्तूरी। मैं इसे एक टिप्पणी से अधिक कुछ के रूप में पोस्ट करूँगा।
duffymo

2
मेरी अज्ञानता के लिए क्षमा करें, लेकिन क्या यह वर्तमान संस्कृति का उपयोग नहीं करेगा? मैं एक .NET बैकग्राउंड BTW फॉर्म बना रहा हूँ।
13 Г И О И О

3
पूर्णांक के लिए, डिफ़ॉल्ट रूप से कोई संस्कृति-विशिष्ट सामग्री का उपयोग नहीं किया जा रहा है (कोई दशमलव या हजारों विभाजक नहीं है)। इसके NumberFormatterलिए जो है। आप जैसे स्वरूपों का उपयोग कर सकते हैं NumberFormat.getInstance(Locale.FRENCH)
कैट

111

यह एक अच्छा तरीका नहीं है।

इंट से स्ट्रिंग में रूपांतरण करते समय, इसका उपयोग किया जाना चाहिए:

int i = 5;
String strI = String.valueOf(i);

7
1. आप खाली स्ट्रिंग के लिए पूछते हैं; 2. आप सहमति मांगते हैं; 3. जैसा कि आपके पास एक स्ट्रिंग नहीं है, आप अंत में अपने इंट को स्ट्रिंग में बदल देंगे। Daridoo का समाधान पहले चरणों से बचें।
निकोलस

में जोड़े जाने से पहले int iबॉक्सिंग करता Integerहै String strI?
केविन मेरेडिथ

1
@KevinMeredith, नहीं, यह नहीं है। आप वास्तव में बुला रहे होंगे StringBuilder.append(int)(और सभी आदिम प्रकारों के लिए StringBuilderएक appendविधि है)।
कैट

60

यह केवल अनुकूलन 1 नहीं है । मुझे पसंद नहीं है

"" + i

क्योंकि यह व्यक्त नहीं करता है कि मैं वास्तव में 2 क्या करना चाहता हूं ।

मैं एक (खाली) स्ट्रिंग में पूर्णांक जोड़ना नहीं चाहता। मैं एक पूर्णांक को स्ट्रिंग में बदलना चाहता हूं:

Integer.toString(i)

या, मेरी पसंद नहीं है, लेकिन अभी भी सहमति से बेहतर है, एक वस्तु (पूर्णांक) का एक स्ट्रिंग प्रतिनिधित्व प्राप्त करें:

String.valueOf(i)

1. कोड के लिए जिसे बहुत बार कहा जाता है, जैसे लूप्स में, अनुकूलन सुनिश्चित करना भी एक बिंदु है, जो कि संगति का उपयोग नहीं करता है

2. यह या में जैसे वास्तविक संघनन के उपयोग के लिए मान्य नहीं हैSystem.out.println("Index: " + i); String id = "ID" + i;


3
जो लोग इस संदर्भ में प्रदर्शन की बात कर रहे हैं, वे विचलित हैं। दूर, दूर, दूर, दूर, दूर, कहीं अधिक महत्वपूर्ण पठनीयता है
ब्रायन गोएटज़

23

बहुत सारे परिचयात्मक विश्वविद्यालय पाठ्यक्रम इस शैली को सिखाते हैं, दो कारणों से (मेरे अनुभव में):

  • इसमें कक्षाओं या विधियों की समझ की आवश्यकता नहीं है। आमतौर पर, "क्लास" शब्द का उल्लेख करने से पहले इसे पढ़ाया जाता है - और न ही विधि कॉल। तो कुछ का उपयोग String.valueOf(…)करना छात्रों को भ्रमित करेगा।

  • यह "ऑपरेटर ओवरलोडिंग" का एक उदाहरण है - वास्तव में, यह हमें मुहावरेदार ओवरलोड ऑपरेटर के रूप में बेचा गया था (यहां छोटे आश्चर्य, क्योंकि जावा कस्टम ऑपरेटर को ओवरलोडिंग की अनुमति नहीं देता है)।

तो यह या तो उपदेशात्मक आवश्यकता से बाहर पैदा हो सकता है (हालांकि मैं तर्क दूंगा कि यह सिर्फ बुरा शिक्षण है) या एक सिद्धांत को स्पष्ट करने के लिए उपयोग किया जाता है जो अन्यथा जावा में प्रदर्शित करने के लिए काफी कठिन है।


2
मुझे लगता है कि इसके विपरीत जैसे "" + मैं न्यूबीक को भ्रमित करेगा। और यह भी उनके बाकी जीवन के लिए एक बुरी शैली है।
कॉन्स्टेंटिन ज़ायूबिन

15

भाव

"" + i

रनटाइम पर स्ट्रिंग रूपांतरण की ओर जाता iहै। अभिव्यक्ति का समग्र प्रकार है Stringiपहले एक Integerवस्तु ( new Integer(i)) में परिवर्तित किया String.valueOf(Object obj)जाता है , फिर कहा जाता है। तो यह बराबर है

"" + String.valueOf(new Integer(i));

जाहिर है, यह केवल कॉल करने की तुलना में थोड़ा कम है String.valueOf(new Integer(i))जो बहुत ही परिणाम देगा।

इसका लाभ ""+iयह है कि टाइपिंग आसान / तेज है और कुछ लोग सोच सकते हैं, कि यह पढ़ना आसान है। यह एक कोड गंध नहीं है क्योंकि यह किसी भी गहरी समस्या का संकेत नहीं देता है।

(संदर्भ: जेएलएस १५..1.१ )


3
आपका "समतुल्य" कथन समकक्ष नहीं है। यहां तक ​​कि अगर String.valueOfआवश्यक बॉक्सिंग कहते हैं i(यह नहीं है, क्योंकि वहाँ एक अधिभार है कि स्वीकार करता है int), यह उपयोग नहीं करेगा new Integer(i), यह उपयोग करेगा Integer.valueOf(i)। लेकिन यह वास्तव में ऐसा नहीं करता है। यह new StringBuilder().append("").append(i).toString()सिमोन के उत्तर नोट के रूप में करता है । StringBuilder एक आदिम int iएक स्ट्रिंग में बदलने के लिए अपने तर्क है ।
मार्क पीटर्स

4
कोड गंध के बारे में हिस्सा हालांकि सही है; कोड गंध यहां गलत शब्द है। तो मैं नीचे उतार दूंगा।
मार्क पीटर्स

इसे "" + i के साथ करने में अक्षम लगता है। बस सरल Integer.toString या String.valueOf की सिफारिश की जाती है। देखें javadevnotes.com/java-integer-to-string-examples
JavaDev

14

व्यक्तिगत रूप से, मुझे इस कोड में कुछ भी बुरा नहीं दिख रहा है।

यह बहुत उपयोगी है जब आप एक इंट वैल्यू लॉग करना चाहते हैं, और लकड़हारा सिर्फ एक स्ट्रिंग को स्वीकार करता है। मैं कहूंगा कि इस तरह का रूपांतरण सुविधाजनक है जब आपको स्ट्रिंग को स्वीकार करने की विधि को कॉल करने की आवश्यकता होती है, लेकिन आपके पास एक अंतर मूल्य है।

के बीच चुनाव के लिए Integer.toStringया String.valueOf, यह सब स्वाद की बात है।
... और आंतरिक रूप से, विधि को String.valueOfकॉल करता है Integer.toString। :)


12

दूसरा तरीका जो मुझे पता है वह Integerकक्षा से है:

Integer.toString(int n);
Integer.toString(int n, int radix);

एक ठोस उदाहरण (हालांकि मुझे नहीं लगता कि आपको किसी की आवश्यकता होगी):

String five = Integer.toString(5); // returns "5"

यह अन्य आदिम प्रकारों के लिए भी काम करता है, उदाहरण के लिए Double.toString

अधिक जानकारी के लिए यहां देखें।


9

यह तकनीक एक स्नातक स्तर के परिचय-टू-जावा वर्ग में सिखाई गई थी जिसे मैंने एक दशक पहले लिया था। हालाँकि, मुझे ध्यान देना चाहिए कि, IIRC, हमने अभी तक स्ट्रिंग और इंटेगर वर्ग के तरीकों की ओर ध्यान नहीं दिया है।

तकनीक सरल और टाइप करने में तेज है। यदि मैं जो कुछ कर रहा हूं, वह सब कुछ छाप रहा है, तो मैं इसका उपयोग करूंगा (उदाहरण के लिए System.out.println("" + i);। हालांकि, मुझे लगता है कि यह रूपांतरण करने का सबसे अच्छा तरीका नहीं है, क्योंकि यह विचार करने का एक सेकंड लगता है कि इसका उपयोग कब हो रहा है। इस तरह। इसके अलावा, अगर प्रदर्शन एक चिंता का विषय है, तो यह धीमा (अधिक नीचे, साथ ही अन्य उत्तरों में) लगता है।

व्यक्तिगत रूप से, मैं Integer.toString () को पसंद करता हूं, क्योंकि यह स्पष्ट है कि क्या हो रहा है। String.valueOf () मेरी दूसरी पसंद होगी, क्योंकि यह भ्रामक प्रतीत होता है (डारियो के उत्तर के बाद टिप्पणियों को देखें)।

सिर्फ अनुदानों के लिए :) मैंने तीन तकनीकों का परीक्षण करने के लिए कक्षाएं लिखीं: "" + i, Integer.toString और String.ValueOf। प्रत्येक परीक्षण ने सिर्फ 1 से 10000 तक स्ट्रिंग्स में चींटियों को परिवर्तित किया। मैंने तब लिनक्स टाइम कमांड के माध्यम से प्रत्येक को पांच बार चलाया । Integer.toString () String.valueOf () से एक बार थोड़ा तेज था, उन्होंने तीन बार बांधा, और String.valueOf () एक बार में तेज हो गया; हालाँकि, यह अंतर कभी भी कुछ मिलीसेकंड से अधिक नहीं था।

"" + I तकनीक एक को छोड़कर हर परीक्षण पर दोनों की तुलना में धीमी थी, जब यह Integer.toString () की तुलना में 1 मिलीसेकंड तेज थी और String.valueOf () की तुलना में 1 मिलीसेकेंड धीमी थी (स्पष्ट रूप से उसी परीक्षण पर जहां String.valueOf () Integer.toString ()) से अधिक तेज़ था। हालांकि यह आमतौर पर केवल कुछ मिलीसेकंड धीमा था, एक परीक्षण था जहां यह लगभग 50 मिलीसेकंड धीमा था। YMMV


1
JIT को ध्यान में रखना न भूलें - पहले कुछ रूपांतरण बहुत धीमे होंगे और समय को विकृत करेंगे। मेरे मैकबुक पर संघटन अन्य दो विधियों की तुलना में ~ 20 से अधिक समय लेता है (जो दोनों रूपांतरण प्रति ~ 50ns लेते हैं), इसलिए एमएस के क्रम में आपने जो अंतर देखे हैं, वे शायद यादृच्छिक त्रुटि (शेड्यूलिंग, इंटरप्ट, आदि) के कारण हैं।
सिमोनजे

6

स्ट्रिंग्स में परिवर्तित करने के विभिन्न तरीके हैं:

StringBuilder string = string.append(i).toString();
String string = String.valueOf(i);
String string = Integer.toString(i);

StringBuilder string = string.append (i) .toString (); ... हम्म, तो यह स्ट्रिंगबर्ल है, या एक स्ट्रिंग है? यहाँ कुछ गड़बड़ ...
फ्रांता

6

यह इस बात पर निर्भर करता है कि आप अपने स्ट्रिंग का उपयोग कैसे करना चाहते हैं। यह मदद कर सकता है:

String total =  Integer.toString(123) + Double.toString(456.789);

5

ज्यादातर सिमोनज पर डिट्टो। मैं वास्तव में "" + मुहावरे को नापसंद करता हूं। यदि आप कहते हैं कि String.valueOf (i), जावा पूर्णांक को एक स्ट्रिंग में परिवर्तित करता है और परिणाम देता है। यदि आप कहते हैं कि "" + i, जावा एक स्ट्रिंगबुलस्ट ऑब्जेक्ट बनाता है, तो एक रिक्त स्ट्रिंग को इसमें जोड़ता है, पूर्णांक को एक स्ट्रिंग में परिवर्तित करता है, इसे स्ट्रिंगब्यूलर में जोड़ता है, फिर स्ट्रिंगरब्यूलर को स्ट्रिंग में परिवर्तित करता है। यह बहुत सारे अतिरिक्त कदम हैं। मुझे लगता है कि अगर आप इसे एक बड़े कार्यक्रम में एक बार करते हैं, तो यह कोई बड़ी बात नहीं है। लेकिन अगर आप हर समय ऐसा कर रहे हैं, तो आप कंप्यूटर को अतिरिक्त काम करने के लिए तैयार कर रहे हैं और इन सभी अतिरिक्त वस्तुओं को बना रहे हैं, जिन्हें साफ करना है। मैं माइक्रो-ऑप्टिमाइज़ेशन के बारे में कट्टरता नहीं प्राप्त करना चाहता, लेकिन मैं बेकार भी बेकार नहीं जाना चाहता।



5

पूर्णांक को स्ट्रिंग में बदलने के कई तरीके हैं:

1)

Integer.toString(10);

2)

 String hundred = String.valueOf(100); // You can pass an int constant
 int ten = 10;
 String ten = String.valueOf(ten)

3)

String thousand = "" + 1000; // String concatenation

4)

String million = String.format("%d", 1000000)

1
String.format ("% d", 1000000) ... यह वास्तव में Int नहीं है। String रूपांतरण, यह बल्कि String >> String प्रसंस्करण है यहाँ, अतिभारित होने के बावजूद। इसलिए मैं इसकी सिफारिश नहीं करता। निश्चित रूप से सिर्फ रूपांतरण के उद्देश्यों के लिए नहीं।
फ्रांता


3

किसी संख्या को स्ट्रिंग में बदलने के लिए "" + i सबसे छोटा और सरल तरीका है। यह सबसे कुशल नहीं है, लेकिन यह सबसे स्पष्ट IMHO है और यह आमतौर पर अधिक महत्वपूर्ण है। कोड जितना सरल होगा, गलती होने की संभावना उतनी ही कम होगी।


2
String.valueOf या Integer.toString को कॉल करने में कोई गलती कैसे होगी?
ईवा

1
मैं String.valueOf () के गैर-आदर्श उपयोगों के एक जोड़े में आया हूं, लेकिन अब मैं उन्हें याद नहीं कर सकता। जबकि आउटपुट सही था यह तुलना में कम कुशल था""+i
पीटर लॉरी

2

व्यक्तिगत रूप से मुझे लगता है कि "" + मुझे मूल प्रश्न पोस्टर के रूप में दिखता है "बदबूदार"। मैंने जावा के अलावा बहुत सी OO भाषाओं का उपयोग किया है। यदि उस वाक्यविन्यास को उचित माना जाता था, तो जावा केवल "मैं" की आवश्यकता के बिना अकेले व्याख्या करूंगा, जैसा कि वांछित को एक स्ट्रिंग में परिवर्तित किया जाना है और इसे तब करें जब गंतव्य प्रकार असंदिग्ध हो और दाईं ओर केवल एक ही मूल्य की आपूर्ति की जाएगी । दूसरे को कंपाइलर, खराब मोजो को बेवकूफ बनाने के लिए एक 'ट्रिक' की तरह लगता है जब अन्य निर्माताओं या अन्य प्लेटफार्मों द्वारा किए गए Javac के विभिन्न संस्करणों पर विचार किया जाता है यदि कोड को कभी भी पोर्ट करने की आवश्यकता होती है। मेरे पैसे के लिए हेक यह कई अन्य OOL की तरह होना चाहिए। एक टाइपकास्ट लें: (स्ट्रिंग) i। विंक्स

मेरे सीखने के तरीके को देखते हुए और ऐसे निर्माण को समझने में आसानी के लिए जब दूसरों के कोड को जल्दी से पढ़ता हूं तो मैं Integer.toString (i) विधि के लिए वोट करता हूं। एक दो या दो को भूल जाते हैं कि कैसे जावा बैकग्राउंड्स को String.valueOf (i) में लागू करता है, यह तरीका मुझे सही लगता है और ठीक वही कहता है जो हो रहा है: मेरे पास और इंटेगर है और मेरी इच्छा है कि इसे स्ट्रिंग में बदल दिया जाए।

एक अच्छी बात यह है कि एक दो बार बनाया गया है, शायद स्ट्रींगबर्ल अप फ्रंट का उपयोग करते हुए टेक्स्ट और इन्टस या अन्य ऑब्जेक्ट्स के स्ट्रिंग्स के मिश्रण का निर्माण करने का एक अच्छा उत्तर है, क्योंकि बैकग्राउंड वैसे भी क्या होगा?

मैंस सवाल के जवाब के पहले से ही अच्छी तरह से भुगतान किया किट्टी में फेंक दिया बस मेरे दो सेंट ... मुस्कुराता है

कुछ प्रतिवेदन के बारे में मेरे स्वयं के लिए संपादित करें:

ठीक है, ठीक है, मैं इस पर कुछ और सोच रहा था और String.valueOf (i) भी पूरी तरह से अच्छा है क्योंकि यह कहता है: मुझे एक स्ट्रिंग चाहिए जो एक पूर्णांक के मूल्य का प्रतिनिधित्व करता है। lol, अंग्रेजी तो जावा को पार्स करने के लिए अधिक कठिन है! लेकिन, मैं अपने उत्तर / टिप्पणी के बाकी हिस्सों को छोड़ देता हूं ... मुझे हमेशा एक विधि / फ़ंक्शन श्रृंखला के निम्नतम स्तर का उपयोग करने के लिए सिखाया गया था यदि संभव हो और अभी भी रीडबैलिटी बनाए रखता है तो अगर String.valueOf कॉल करता है Integer.toString तो एक पूरे नारंगी का उपयोग क्यों करें अगर आपके बस इसे वैसे भी छीलने वाला है, हम्म?

StringBuilder के बारे में अपनी टिप्पणी को स्पष्ट करने के लिए, मैं ज्यादातर शाब्दिक पाठ और अंतरंग के कॉम्ब्स के साथ बहुत सारे तार का निर्माण करता हूं और वे लंबे और बदसूरत होने के साथ-साथ ऊपर बताई गई दिनचर्या के साथ कॉल करते हैं, इसलिए मुझे लगता है कि अगर वे बन जाते हैं एसबी वैसे भी वस्तुओं को जोड़ता है और एपेंड विधि में अतिभार होता है यह सिर्फ आगे बढ़ने और इसका उपयोग करने के लिए क्लीनर हो सकता है ... इसलिए मुझे लगता है कि मैं इस पर 5 सेंट तक हूं, एह? जबरदस्त हंसी...



-5

सरल टाइपकास्टिंग का प्रयास करें

char c = (char) i;

3
इंट को स्ट्रिंग में बदलने का यह एक अच्छा तरीका नहीं है। दरअसल, आप एक इंट को स्ट्रिंग में परिवर्तित नहीं कर रहे हैं, आप एक इंट को एक चार में कनवर्ट कर रहे हैं। यह इंट को ASCII वर्ण कोड के रूप में व्याख्या करेगा और आपको वह चार्ट देगा। यह खतरनाक है (नकारात्मक मूल्य, आदि) और कुल मिलाकर सादा गलत।
नेपॉक्सक्स

कृपया उपरोक्त प्रश्न स्पष्ट करें, चार और स्ट्रिंग दोनों अलग हैं ...!

लेकिन यह काम करता है (ASCII चारसेट "ऑफ़सेट"):char c = (char) (i + 48);
इलेक्ट्रोबैबे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.