JavaRush /جاوا بلاگ /Random-UR /جاوا میں charAt() طریقہ

جاوا میں charAt() طریقہ

گروپ میں شائع ہوا۔
بہت سی بنیادی تکنیکیں ہیں جنہیں ہم باقاعدگی سے استعمال کرتے ہیں بغیر سوچے سمجھے۔ ٹھیک ہے، اگر آپ اس کے بارے میں سوچتے ہیں اور دیکھتے ہیں کہ کچھ بظاہر آسان طریقے کیسے لاگو ہوتے ہیں؟ میرے خیال میں اس سے ہمیں جاوا کے ایک قدم قریب آنے میں مدد ملے گی) charAt() جاوا میں - 1آئیے ایک ایسی صورتحال کا تصور کریں جس میں ہمیں کسی تار میں ایک مخصوص کردار نکالنے کی ضرورت ہے۔ ہم جاوا میں یہ کیسے کر سکتے ہیں؟ مثال کے طور پر، کال کرکے Java String charAt۔ charAt()ہم آج کے مضمون میں طریقہ کے بارے میں بات کریں گے.

نحو

char charAt(int index)مخصوص انڈیکس پر چار قدر واپس کرتا ہے۔ انڈیکس 0 سے length()-1. یعنی، charترتیب کی پہلی قدر in ہے index 0، اگلی ہے in، index 1وغیرہ، جیسا کہ ارے انڈیکسنگ کا معاملہ ہے۔

مثال

public static void main(String[] args) {
   System.out.print("JavaRush".charAt(0));
   System.out.print("JavaRush".charAt(1));
   System.out.print("JavaRush".charAt(2));
   System.out.print("JavaRush".charAt(3));
}
پہلی سطر پہلا حرف لیتی ہے، دوسری سطر دوسری لیتی ہے، وغیرہ۔ چونکہ نہیں println، لیکن یہاں استعمال کیا جاتا ہے print، بغیر کسی نئی لائن کے، ہمیں کنسول میں درج ذیل آؤٹ پٹ ملے گا۔

Java
اگر charدیئے گئے انڈیکس کو یونیکوڈ کے طور پر دکھایا جاتا ہے، تو طریقہ کار کا نتیجہ java charAt()وہ کردار ہوگا جو اس یونیکوڈ کی نمائندگی کرتا ہے:
System.out.println("J\u0061vaRush".charAt(1));
کنسول آؤٹ پٹ:

a

"ہڈ کے نیچے" کیا ہے

یہ کیسے کام کرتا ہے، آپ پوچھتے ہیں؟ charAt() جاوا میں - 2حقیقت یہ ہے کہ ہر آبجیکٹ میں دی گئی سٹرنگ کے عناصر کے بائٹس کے ساتھ Stringایک صف ہوتی ہے :byte
private final byte[] value;
اور یہاں خود طریقہ ہے chatAt:
public char charAt(int index) {
   if (isLatin1()) {
       return StringLatin1.charAt(value, index);
   } else {
       return StringUTF16.charAt(value, index);
   }
}
isLatin1- ایک جھنڈا جو یہ بتاتا ہے کہ آیا ہماری تار میں صرف لاطینی حروف شامل ہیں یا نہیں۔ یہ طے کرتا ہے کہ اگلا کون سا طریقہ کہا جائے گا۔

isLatin1 = سچ

اگر سٹرنگ صرف لاطینی حروف پر مشتمل ہے تو، ایک جامد charAtکلاس طریقہ کہا جاتا ہے StringLatin1:
public static char charAt(byte[] value, int index) {
   if (index < 0 || index >= value.length) {
       throw new StringIndexOutOfBoundsException(index);
   }
   return (char)(value[index] & 0xff);
}
پہلا مرحلہ یہ چیک کرنا ہے کہ آنے والا انڈیکس 0 سے بڑا یا اس کے برابر ہے، اور یہ اندرونی بائٹ سرنی سے آگے نہیں بڑھتا ہے، اور اگر ایسا نہیں ہے، تو پھر ایک استثناء پھینک دیا جائے گا new StringIndexOutOfBoundsException(index)۔ اگر چیک پاس ہو جاتے ہیں، تو پھر وہ عنصر لیا جاتا ہے جس کی ہمیں ضرورت ہوتی ہے۔ آخر میں ہم دیکھتے ہیں:
  • &بائنری آپریشن کے لیے byteبٹ وائز تک پھیلا ہوا ہے۔
  • 0xffکچھ نہیں کرتا لیکن &دلیل کی ضرورت ہوتی ہے۔
  • (char)ASCII ٹیبل سے ڈیٹا کو تبدیل کرتا ہے۔char

isLatin1 = غلط

اگر ہمارے پاس صرف لاطینی حروف نہیں ہوتے تو کلاس استعمال کی جائے گی StringUTF16اور اس کا جامد طریقہ کہا جائے گا:
public static char charAt(byte[] value, int index) {
   checkIndex(index, value);
   return getChar(value, index);
}
جو بدلے میں کہتے ہیں:
public static void checkIndex(int off, byte[] val) {
   String.checkIndex(off, length(val));
}
اور وہ ایک جامد طریقہ کی طرف نمائندہ ہے String:
static void checkIndex(int index, int length) {
   if (index < 0 || index >= length) {
       throw new StringIndexOutOfBoundsException("index " + index +
                                                 ", length " + length);
   }
}
یہاں، درحقیقت، یہ دیکھنے کے لیے چیک کیا جاتا ہے کہ آیا اشاریہ درست ہے: دوبارہ، آیا یہ مثبت ہے یا صفر، اور آیا یہ صف کی حدود سے باہر نہیں گیا ہے۔ لیکن ایک StringUTF16طریقہ میں کلاس میں، charAtدوسرے طریقہ کو کال کرنا زیادہ دلچسپ ہوگا:
static char getChar(byte[] val, int index) {
   assert index >= 0 && index < length(val) : "Trusted caller missed bounds check";
   index <<= 1;
   return (char)(((val[index++] & 0xff) << HI_BYTE_SHIFT) |
                 ((val[index]   & 0xff) << LO_BYTE_SHIFT));
}
آئیے اس کا تجزیہ کرنا شروع کرتے ہیں کہ یہاں اصل میں کیا ہو رہا ہے۔ طریقہ کار کے آغاز میں پہلا قدم انڈیکس کی درستگی کے لیے ایک اور چیک ہے۔ یہ سمجھنے کے لیے کہ آگے کیا ہوتا ہے، آپ کو یہ سمجھنے کی ضرورت ہے: جب ایک غیر لاطینی کردار صف میں داخل ہوتا ہے value، تو اس کی نمائندگی دو بائٹس (دو سرنی خلیات) سے ہوتی ہے۔ اگر ہمارے پاس دو سیریلک حروف کی تار ہے - "av"، تو:
  • 'a' کے لیے یہ بائٹس کا ایک جوڑا ہے - 48 اور 4؛
  • 'in' - 50 اور 4 کے لیے۔
یعنی، اگر ہم سٹرنگ "av" بناتے ہیں، تو اس میں ایک صف ہوگی value- {48, 4, 50, 4} دراصل، یہ طریقہ دو صفوں کے ساتھ کام کرتا ہے value۔ لہذا، اگلا مرحلہ index <<= 1;صف میں مطلوبہ کریکٹر کے پہلے بائٹ کے انڈیکس پر براہ راست جانے کے لیے ایک شفٹ ہے value۔ اب ہم کہتے ہیں کہ ہمارے پاس ایک تار ہے "абвг"۔ پھر ویلیو اری اس طرح نظر آئے گی: {48, 4, 49, 4, 50, 4, 51, 4}۔ ہم سٹرنگ کا تیسرا عنصر طلب کرتے ہیں، اور پھر بائنری نمائندگی 00000000 00000011 ہے۔ 1 سے شفٹ ہونے پر، ہمیں 00000000 00000110 ملتا ہے، یعنی index = 6۔ بٹ وائز آپریشنز پر اپنے علم کو تازہ کرنے کے لیے، آپ یہ مضمون پڑھ سکتے ہیں ۔ charAt() جاوا میں - 4ہم کچھ متغیرات بھی دیکھتے ہیں: HI_BYTE_SHIFT اس معاملے میں یہ 0 ہے۔ LO_BYTE_SHIFTاس صورت میں یہ 8 ہے۔ اس طریقہ کی آخری لائن میں:
  1. ایک عنصر ویلیو اری سے لیا جاتا ہے اور اسے بٹ وائز کے ذریعے منتقل کیا جاتا ہے HI_BYTE_SHIFT، یعنی 0، بڑھاتے ہوئے index +1۔

    سٹرنگ کے ساتھ مثال میں "абвг"، چھٹا بائٹ - 51 - ایسا ہی رہے گا، لیکن ایک ہی وقت میں انڈیکس بڑھ کر 7 ہو جاتا ہے۔

  2. اس کے بعد، ارے کا اگلا عنصر اسی طرح بٹ وائز لیا جاتا ہے، لیکن LO_BYTE_SHIFT، یعنی 8 بٹس کے ذریعے۔

    اور اگر ہمارے پاس بائٹ 4 ہے، جس کی بائنری نمائندگی ہے - 00000000 00000100، تو 8 بٹس کے ذریعے شفٹ کرنے کے بعد ہمارے پاس 00000100 00000000 ہوگا۔ اگر یہ ایک عدد ہے - 1024۔

  3. اگلا، ان دو اقدار کے لیے، آپریشن کی پیروی کرتا ہے | (OR)۔

    اور اگر ہمارے پاس بائٹس 51 اور 1024 ہیں، جو بائنری نمائندگی میں 00000000 00110011 اور 00000100 00000000 کی طرح نظر آتے ہیں، تو آپریشن کے بعد ORہمیں 00000100 00000100 00110011 ملے گا، جس کا مطلب ہے demal 107 سسٹم میں۔

    ٹھیک ہے، آخر میں، نمبر 1075 کو چار قسم میں تبدیل کیا جاتا ہے، اور int --> char کو تبدیل کرتے وقت، ASCII ٹیبل استعمال ہوتا ہے، اور اس میں، نمبر 1075 کے نیچے، حرف 'r' ہوتا ہے۔

charAt()دراصل، جاوا پروگرامنگ میں طریقہ کار کے نتیجے میں ہمیں اس طرح 'g' ملتا ہے ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION