Skip to main content

Java-н String дээрх чухал 10 ойлголт

     String нь тэмдэгтүүдийн дараалсан цуглуулга бөгөөд маш түгээмэл хэрэглэгддэг.
Объект төрөлтэй. Классын нэр:  String .
Жава дээр код бичдэг хэн бүхний мэдэж байх ёстой String-н талаарх чухал 10 зүйлийг толилуулбаас...

1. String класс нь java.lang package-д агуулагддаг. java.lang package-н аливаа клаас нь автоматаар импорт хийгдсэн байдаг учраас String классыг импортлохгүйгээр шууд хэрэглэнэ.

2. String нь цаанаа C/C++ хэлтэй адилхнаар тэмдэгтүүдийн массив байдлаар дүрслэгддэг. Ялгаатай нь гэвэл NULL ('\0') тэмдэгтээр төгсдөггүй.

3. String нь immutable объект юм. Энэ нь нэгэнт оноогдсон объектын утгыг өөрчилж болохгүй гэсэн үг. toUpperCase(), toLowerCase() г.м функцээр утгыг нь өөрчилж болдог биз дээ гэж үү? Үнэндээ бол цаанаа цоо шинэ объект үүсдэг.

4. Java дээр операторыг дахин тодорхойлох боломжгүй боловч String дээр + оператор
дахин тодорхойлогдсон байдаг ба утгуудыг нь хооронд нь залгахад хэрэглэгддэг. Цаанаа StringBuilder, StringBuffer объектууд, тэдний append() функцийн тусламжтайгаар хийгддэг. Хэд хэдэн объект хий дэмий үүсэж байгаа нь хурд, санах ойн хувьд сөрөг нөлөөтэй учраас текст залгахдаа + оперторыг аль болох хэрэглэхгүйгээр StringBuilder, StringBuffer классуудыг ашиглах нь оновчтой.

5. String класст equals, hashcode функцүүд дахин тодорхойлогдсон байдаг ба хоёр String-ийг ижил дараалал бүхий ижил тэмдэгтүүдээс бүрдсэн эсэхийг шалгана. Том жижиг үсгийг тоохгүйгээр харьцуулмаар байвал ("a" == "A") equalsIgnoreCase() функцийг хэрэглэнэ.

6. Давхар кавычка дотор бичиж оноосон текстүүд String literal-д хамаардаг ба String pool-д хадгалагддаг. Ж: "Hello".

7. String pool : Энгийнээр бол String literal-уудыг агуулдаг, удирдан зохион байгуулдаг сав. Доорх жишээний хувьд "Bat", "Dorj", "Tsetseg" нь literal-ууд юм. Дараах 5 мөр кодын үр дүнд 4 объект үүснэ. Учир нь String pool дээр ижилхэн текст өмнө орсон байвал дахиж үүсдэггүй. Тэгэхээр lastName1, lastName2 нь String pool дээр нэг хаягтай байна. Харин lastName3 нь new String() гэж үүсгэсэн учраас шинэ объект болж үүснэ.
  String firstName1 = "Bat";  
  String lastName1 = "Dorj";  
  String firstName2 = "Tsetseg";  
  String lastName2 = "Dorj";  
  String lastName3 = new String("Dorj");  
Дээрх жишээний хувьд lastName1 == lastName2, lastName1 != lastName3, lastName1.equals(lastName2) == True, lastName1.equals(lastName3) == True байна.
String pool нь жавагийн өмнөх хувилбаруудад санах ойн Perm Gen хэсэгт оршдог байсан бол жава 8-аас эхэлж Java heap space-д хадгалагддаг болсон.

8. toString() метод нь Object супер класст тодорхойлогдсон байдаг ба объектыг String-ээр яаж дүрслэх буюу яаж текст болгохыг илэрхийлнэ. Өөрийн класс дотроо дахин тодорхойлж, тохиромжтой утга буцааж хэрэглэх нь чухал. Ж:
 public static class Language {  
           private String name;  
           private int rank;  
           public Language(String name, int rank) {  
                super();  
                this.name = name;  
                this.rank = rank;  
           }  
           public String getName() {  
                return name;  
           }  
           public int getRank() {  
                return rank;  
           }  
           @Override  
           public String toString() {  
                return String.format("%s: %s", this.name, this.rank);  
           }  
      }  

9. String-г literal байдлаар зарлахаас гадна byte array, char array, StringBuffer, StringBuilder зэргээс үүсгэх боломжтой. Ж:
 byte[] bytes = new byte[10];  
 String s = new String(bytes);  
 char[] chars = new char[10];  
 s = new String(chars);  
 StringBuffer buffer = new StringBuffer();  
 s = buffer.toString();  
 StringBuilder builder = new StringBuilder();  
 s = builder.toString();  

10. Түгээмэл хэрэглэгддэг функцүүд: String класс нь маш олон функцүүдтэй. Эдгээрээс хамгийн түгээмэл хэрэглэгддэг зарим нэгийг нь товч тайлбарлая.
indexOf, lastIndexOf: Тэмдэгт эсвэл текстийн эхлэх index-г (lastIndexOf: хамгийн сүүлийн) буцаана. Байхгүй бол -1.
 String s = "Hello";  
 int ix1 = s.indexOf('l');  
 int ix2 = s.lastIndexOf("l");  
 int ix3 = s.indexOf("hi");  
 System.out.println(String.format("Result: ix1: %s, ix2: %s, ix3: %s ", ix1, ix2, ix3));  
 Result: ix1: 2, ix2: 3, ix3: -1   

toCharArray: String-г тэмдэгт төрлийн массив болгоно. Яг үнэндээ бол String-н цаана байгаа тэмдэгтүүдийг хуулж, char төрлийн массив үүсгэнэ. Ж:
 String s = "Hello";  
 char[] chars = s.toCharArray();  

valueOf: int, long, char, double г.м төрлүүдийг String рүү хөрвүүлнэ. Ж:
 int i = 10;  
 String iStr = String.valueOf(i);  
 double d = 10.0;  
 String dStr = String.valueOf(d);  
 System.out.println(String.format("Result: %s %s", iStr, dStr));  
 Result: 10 10.0  

charAt: Өгөгдсөн индекст харгалзах тэмдэгтийг буцаана. Ж:
 String s = "Hello";  
 System.out.println(String.format("Result: %c", s.charAt(1)));  
 Result: e  

trim: Хоёр талын хоосон зайг шахна.
substring: Текстийн тодорхой хэсгийг буцаана
split: Regex-ээр дэд хэсгүүдэд хуваана
replace: Тодорхой тэмдэгт эсвэл текстийг өөр текстээр солино
replaceAll: Regex-т харгалзах бүх хэсгийг өөр текстээр эсвэл regex-н группээр солино
toUpperCase, toLowerCase: Текстийн бүх үсгийг харгалзан ТОМ, жижиг болгоно.
format: Текстийг форматална. String.format("Hello %s", firstName)
concat, join: Текстүүдийг залгана. String.join(": ", id, name) -> i: name
getBytes: Byte массив руу хөрвүүлнэ. Charset-г нь зааж өгөх боломжтой. "aa".getBytes(), "aa".getBytes("UTF-8")

Comments

Popular posts from this blog

4 бэрх

Нүүдэлчдийн эртний тоглоомуудын нэг болох шагайгаар тоглож үзээгүй хүн бараг байхгүй биз. Маниусыг ухаан орж байх үед зах зээл хэмээгч рүү дөнгөж орж байсан болоод ч тэр үү, шагайнаас өөр тоглочихмоор юм ч бараг байдаггүй байсан. Морь уралдуулах, шагай таалцах, шагай шүүрэх, дөрвөн бэрх орхих гээд л мөн ч сайхан тоглоомууд байж билээ. Гэснээс зарим хоолны газрууд ширээн дээрээ 4 шагай, мэргэлэх хүснэгтийн хамт тавьсан харагддаг. Хүснэгт нь 24 боломжтой байдаг ба заримдаа тохирох хувилбар олдохгүй, самгардах үе бишгүй тохиолддог. Ингэхэд 4 шагайг хаяхад нийтдээ хэдэн янзаар буух вэ? Алгебрын аргаар амархан тооцоолчхож болно л доо. Гэхдээ илүү хялбар аргаар, ө.х random буюу санамсаргүйгээр тоо сонгох аргаар бодъё. 1, 2, 3, 4 нь харгалзан морь, тэмээ, хонь, ямаа байг. Тэгвэл нэлээн хэдэн удаа (бүх боломжоор буухаар) давтаж санамсаргүйгээр 4 тоо сонгоод, уг 4 тоо өмнө сонгогдсон эсэхийг шалгаад, сонгогдоогүй бол боломжийн тоогоо нэмэгдүүлээд явна гэсэн үг. Нийт боломж (давхардсан тоогоо...

Regular expression-ий түгээмэл хэрэглээ

    Regular expression нь string буюу текстээс тодорхой бүтэц бүхий хэсгийг хайж олох зорилготой загвар (pattern) юм. Regular expression-г regex гэж товчилдог. Бүх программчлалын хэл дээр regex-тэй ажилладаг класс, функцүүд байдаг ба тухайн хэлний онцлогоос хамаарч класс, функц нь элдэв янзаар бичигддэг боловч regex нь яг адилхан, нэг стандартын дагуу бичигдэнэ. Өдөр тутмын амьдралд түгээмэл тохиолддог зарим асуудал(бодлого)-ыг жава дээр regex ашиглаж хэрхэн хялбар шийдэж болохыг жишээгээр тайлбарлая.     Жава дээр Pattern , Matcher класуудын тусламжтайгаар хэрэгжүүлнэ. 1. Регистрийн дугаар шалгах (Эхний хоёр орон кирил том үсэг, араас нь 8 оронтой тоо) Pattern ptrn = Pattern.compile("([А-Я|Ө|Ү]{2})(\\d{8})"); Matcher matcher1 = ptrn.matcher("БИ88042515"); Matcher matcher2 = ptrn.matcher("AB88042515"); System.out.println(String.format("1: %s; 2: %s", matcher1.matches(), matcher2.matches())); Хариу: 1: true; 2: false Pattern...

Текстээс хайх Aho-Corasick алгоритм

Alfred V. Aho болон Margaret J. Corasick нарын эрдэмтэд 1975 онд зохиосон. Текстэн өгөгдлөөс олон дэд текстийг нэгэн зэрэг буюу параллель хайж олоход зорилго нь оршдог. Бичих, уншихад хялбар болгох үүднээс текстэн өгөгдлөө текст , хайж олох текстүүдээ үг  гээд нэрлэчихье (Англиар харгалзан  text , dictionary эсвэл text string , pattern string гэж нэрлэдэг). Үг бүрээр давтаж, давталтын алхам бүрд текстийг эхнээс нь дуустал нь давтах байдлаар бол хэн ч олчихно л доо. Харамсалтай нь маш өндөр өртөгтэй, текст уртсаж, үг олшрох тусам тэсвэрлэхийн аргагүй удаан ажиллах учраас тэгж программ бичиж, хүнд хэрэглүүлнэ гэж бол ёстой гонж. Бодит амьдралд ийм төрлийн ямар жишээнүүд байдаг вэ? Текстэн дэх товчилсон үг болон нэр томьёо бүрд тайлбар оруулах Утасны жагсаалт өгөгдсөн бол эздийг нь харгалзуулах Гений дарааллаас тодорхой бүтэцтэй генүүдийг илрүүлэх г.м бичээд байвал дуусашгүй их юм бий. Тэгээд яг яаж вэ?     Гол санаа нь ижил эхлэлтэй үгнүүдийн...