অন্যরা যেমন পছন্দ করে তেমনি উপায় ব্যবহার করে থাকে:
new StringBuilder(hi).reverse().toString()
তবে আপনি যদি নিজের দ্বারা এটি বাস্তবায়ন করতে চান তবে আমি ভয় পাচ্ছি যে বাকী প্রতিক্রিয়াগুলির ত্রুটি রয়েছে।
কারণটি হ'ল ইউনিকোড পয়েন্টগুলির String
একটি তালিকা প্রতিনিধিত্ব করে যা ভেরিয়েবল-দৈর্ঘ্যের এনকোডিং অনুসারে একটি অ্যারেতে এনকোড করা হয়েছে : ইউটিএফ -16 ।char[]
এর অর্থ কিছু কোড পয়েন্ট অ্যারের একক উপাদান ব্যবহার করে (একটি কোড ইউনিট) তবে অন্যরা এর মধ্যে দুটি ব্যবহার করে, সুতরাং এমন অক্ষরের জোড় থাকতে পারে যা অবশ্যই একক ইউনিট হিসাবে বিবেচিত হবে (পরপর "উচ্চ" এবং "নিম্ন" সারোগেটস) ।
public static String reverseString(String s) {
char[] chars = new char[s.length()];
boolean twoCharCodepoint = false;
for (int i = 0; i < s.length(); i++) {
chars[s.length() - 1 - i] = s.charAt(i);
if (twoCharCodepoint) {
swap(chars, s.length() - 1 - i, s.length() - i);
}
twoCharCodepoint = !Character.isBmpCodePoint(s.codePointAt(i));
}
return new String(chars);
}
private static void swap(char[] array, int i, int j) {
char temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C:/temp/reverse-string.txt");
StringBuilder sb = new StringBuilder("Linear B Syllable B008 A: ");
sb.appendCodePoint(65536); //http://unicode-table.com/es/#10000
sb.append(".");
fos.write(sb.toString().getBytes("UTF-16"));
fos.write("\n".getBytes("UTF-16"));
fos.write(reverseString(sb.toString()).getBytes("UTF-16"));
}