JavaRush /جاوا بلاگ /Random-SD /charAt() جاوا ۾ طريقو

charAt() جاوا ۾ طريقو

گروپ ۾ شايع ٿيل
ڪيتريون ئي بنيادي ٽيڪنالاجيون آهن جيڪي اسان باقاعده استعمال ڪندا آهيون ان جي باري ۾ سوچڻ کان سواء. خير، ڇا جيڪڏهن توهان ان بابت سوچيو ۽ ڏسو ته ڪيئن ڪجهه بظاهر سادو طريقا لاڳو ٿين ٿا؟ مان سمجهان ٿو ته اهو اسان کي جاوا جي هڪ قدم ويجهو وڃڻ ۾ مدد ڏيندو) charAt() جاوا ۾ - 1اچو ته هڪ اهڙي صورتحال جو تصور ڪريون جنهن ۾ اسان کي ڪجهه تارن ۾ هڪ خاص ڪردار ڪڍڻو پوندو. اسان اهو ڪيئن ڪري سگهون ٿا جاوا ۾؟ مثال طور، ڪال ڪندي Java String charAt. اسان اڄ جي مضمون ۾ طريقيڪار جي باري ۾ charAt()ڳالهائي ويندي .

نحو

char charAt(int index)مخصوص انڊيڪس تي چار قدر واپس ڪري ٿو. انڊيڪس جي حد 0 کان length()-1. charاهو آهي، ترتيب جي پهرين قيمت ۾ آهي index 0، ايندڙ آهي ان ۾، 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). جيڪڏهن چيڪ گذري ويا آهن، ته اسان کي گهربل عنصر ورتو وڃي. آخر ۾ اسان ڏسون ٿا:
  • &بائنري آپريشن لاءِ bytebitwise تائين وڌايو
  • 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؛
  • لاءِ 'ان' - 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. bitwise عملن تي پنھنجي ڄاڻ کي تازو ڪرڻ لاء، توھان ھي مضمون پڙھي سگھو ٿا . charAt() جاوا ۾ - 4اسان ڪجھ متغير پڻ ڏسون ٿا: HI_BYTE_SHIFT ھن صورت ۾ اھو آھي 0. LO_BYTE_SHIFTھن صورت ۾ اھو آھي 8. ھن طريقي جي آخري لائن ۾:
  1. هڪ عنصر قدر جي صف مان ورتو ويو آهي ۽ bitwise طرفان منتقل ڪيو ويو آهي HI_BYTE_SHIFT، يعني 0، جڏهن ته وڌندي index +1.

    مثال طور اسٽرنگ سان "абвг"، ڇهين بائيٽ - 51 - ائين ئي رهندو، پر ساڳئي وقت انڊيڪس 7 تائين وڌي ٿو.

  2. ان کان پوء، صف جو ايندڙ عنصر ورتو وڃي ٿو ۽ ساڳئي طريقي سان bitwise شفٽ ڪيو وڃي، پر LO_BYTE_SHIFT طرفان، يعني 8 بٽس طرفان.

    ۽ جيڪڏهن اسان وٽ بائيٽ 4 هجي، جنهن ۾ بائنري نمائندگي آهي - 00000000 00000100، پوءِ 8 بِٽ ذريعي شفٽ ڪرڻ کان پوءِ اسان وٽ 00000100 00000000 هوندو. جيڪڏهن اهو هڪ عدد آهي - 1024.

  3. اڳيون، انهن ٻن قدرن لاءِ، عمل هيٺ اچي ٿو | (OR).

    ۽ جيڪڏهن اسان وٽ بائيٽ 51 ۽ 1024 هجن، جيڪي بائنري نمائندگي ۾ 00000000 00000000 00110011 ۽ 00000100 00000000 وانگر نظر اچن ٿا، پوء آپريشن کان پوء ORاسان حاصل ڪنداسين 00000100 00110011، جنهن جو مطلب آهي سسٽم نمبر 107 ۾.

    خير، آخر ۾، نمبر 1075 کي چار قسم ۾ تبديل ڪيو ويندو آهي، ۽ int -> char کي تبديل ڪرڻ وقت، ASCII ٽيبل استعمال ڪيو ويندو آهي، ۽ ان ۾، نمبر 1075 جي هيٺان، ڪردار 'r' هوندو آهي.

charAt()دراصل، جاوا پروگرامنگ ۾ طريقي جي نتيجي ۾ اسان کي 'g' حاصل ٿئي ٿو .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION