Синф
String
яке аз синфҳои маъмултарин дар Java мебошад. Ин мақола якчанд саволҳо ва ҷавобҳои мусоҳибаи Java String муҳимро пешниҳод мекунад. Онҳо барои гирифтани тасвири пурраи синф хеле муфид хоҳанд буд String
ва шуморо ба ҳама гуна саволҳои мусоҳибаи марбут ба синф омода мекунанд String
.
1. String дар Java чист? Ин кадом намуди маълумот аст?
Сатр як синф дар Java мебошад, ки дар бастаи java.lang муайян карда шудааст. Ин як намуди ибтидоии додаҳо ба монанди int ва long нест. Синфи String маҷмӯи аломатҳои сатрро ифода мекунад. Сатрҳо тақрибан дар ҳама замимаҳои Java истифода мешаванд ва чанд далеле ҳастанд, ки мо бояд дар бораи синфи String донем. Ин якimmutable
навъи додаҳои тағирнашаванда ( ) ва ниҳоӣ дар Java мебошад ва String
мошини виртуалӣ ҳамаи an objectҳои синфро дар ҳавзи сатр нигоҳ медорад. Хусусияти дигар String
ин роҳи ба даст овардани an objectҳои синфӣ String
бо истифода аз нохунакҳои дукарата ва пурборкунии оператори "+" барои пайвастшавӣ мебошад.
2. Роҳҳои гуногуни сохтани an objectи String кадомҳоянд?
Мо метавонем бо истифода аз оператори нав an objectҳоро мисли ҳама синфҳои дигари Java эҷод кунем ё мо метавонем нохунакҳои дукаратаро барои сохтани an object истифода баремString
. String
Инчунин якчанд конструкторҳои синф барои гирифтани сатр аз массиви аломатҳо, массиви byteҳо ва инчунин бо истифода StringBuffer
аз ё вуҷуд доранд StringBuilder
.
String str = new String("abc");
String str1 = "abc";
Вақте ки мо бо истифода аз нохунакҳои дукарата сатр эҷод мекунем, Мошини виртуалии Java дар ҳавзи сатр барои сатри дигар бо ҳамон арзиш назар мекунад. Агар сатр ёфт шавад, он гоҳ танҳо истинод ба an objectи мавҷудаи синф баргардонида мешавад String
, вагарна an objectи нав бо арзиши гирифташуда сохта мешавад ва дар ҳавз нигоҳ дошта мешавад. Вақте ки мо оператори навро истифода мебарем, мошини виртуалӣ an object эҷод мекунад String
, аммо онро дар ҳавзи сатр нигоҳ намедорад. Мо метавонем ин усулро intern()
барои нигоҳ доштани сатр дар ҳавзи сатр истифода барем ё истинод гиред, агар чунин сатр аллакай дар ҳавз бошад.
3. Усули тафтиши палиндром будани сатрро нависед.
Агар сатр дар ҳар ду самт якхела бошад, палиндром номида мешавад. Масалан, "аба" сатри палиндромӣ аст. СинфString
ягон усули баргардонидани сатрро пешниҳод намекунад, аммо дарсҳо усули баргардонӣ StringBuffer
доранд StringBuilder
, ки бо он мо метавонем тафтиш кунем, ки сатри мо палиндром аст ё не.
private static boolean isPalindrome(String str) {
if (str == null)
return false;
StringBuilder strBuilder = new StringBuilder(str);
strBuilder.reverse();
return strBuilder.toString().equals(str);
}
Баъзан мусоҳиба метавонад хоҳиш кунад, ки барои ин санҷиш дигар синфҳоро истифода набарад, дар ин ҳолат мо метавонем аломатҳои сатри ҳарду ҷонибро муқоиса кунем, то палиндромро тафтиш кунем.
private static boolean isPalindromeString(String str) {
if (str == null)
return false;
int length = str.length();
System.out.println(length / 2);
for (int i = 0; i < length / 2; i++) {
if (str.charAt(i) != str.charAt(length - i - 1))
return false;
}
return true;
}
4. Усули аз сатр хориљ кардани аломати додашударо нависед.
Мо метавонем усулеро истифода баремreplaceAll
, то ҳама рӯйдодҳои сатрро бо сатри дигар иваз кунем. Аҳамият диҳед, ки усул сатрро ҳамчун аргумент мегирад, аз ин рӯ мо синфро Character
барои сохтани сатр аз аломат истифода мебарем ва онро барои иваз кардани ҳамаи аломатҳо бо сатри холӣ истифода мебарем.
private static String removeChar(String str, char ch) {
if (str == null)
return null;
return str.replaceAll(Character.toString(ch), "");
}
5. Чӣ тавр сатрро ба ҳарфи калон ё хурд табдил додан мумкин аст?
Мо метавонем усулҳои синфроString toUpperCase
барои toLowerCace
ба даст овардани сатрҳои калон ва хурд истифода барем. Ин усулҳо дорои сарбории изофӣ мебошанд, ки аргумент мегиранд Locale
ва қоидаҳои маҳаллисозии онро барои табдил додани сатр ба ҳарфи калон ё хурд истифода мебаранд.
6. Усули SubSequence чӣ кор мекунад?
Java 1.4 интерфейсро муаррифӣ кардCharSequence
, синф String
ин интерфейсро мерос мегирад ва ин ягона сабаби татбиқи усул subSequence
дар синф аст String
. Дар дохor он даъват мекунад substring
. Намунаи оддии истифодаи усул:
public class StringSubsequence {
public static void main(String[] args) {
String str = "www.journaldev.com";
System.out.println("Last 4 char String: "+str.subSequence(str.length()-4, str.length()));
System.out.println("First 4 char String: "+str.subSequence(0, 4));
System.out.println("website name: "+str.subSequence(4, 14));
//substring vs subSequence
System.out.println("substring == subSequence ? "
+(str.substring(4, 14) == str.subSequence(4, 14)));
System.out.println("substring equals subSequence ? "
+(str.substring(4, 14).equals(str.subSequence(4, 14))));
}
}
Натиҷаи барнома инҳоро нишон медиҳад:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Идеалӣ шумо бояд ҳамеша истифода баред substring
.
7. Чӣ тавр ду сатрро дар Java муқоиса кардан мумкин аст?
СинфString
интерфейсро мерос мегирад Comparable
ва ду варианти метод дорад compareTo()
. Усули лексикографӣ compareTo(String anotherString)
an objectро String
бо далели гирифташуда муқоиса мекунад String
. Агар сатри ҷорӣ пеш аз сатри қабулшуда бошад, усул адади манфиро бармегардонад ва агар сатр аз далели қабулшуда пайравӣ кунад, адади мусбатро бармегардонад integer
. Агар усул 0-ро баргардонад, сатр ҳамон арзиш дорад, дар ин ҳолат метод equals(String str)
низ ҳақиқиро бармегардонад. compareToIgnoreCase(String str)
: Ин усул ба усули қаблӣ монанд аст, ба истиснои он, ки он парвандаро сарфи назар мекунад. Он CASE_INSENSITIVE_ORDER Муқоисакунандаро барои муқоисаи ба ҳарфҳои хурд-ҳассос истифода мебарад. Агар арзиши баргардонидан сифр бошад, он гоҳ усул equalsIgnoreCase(String str)
низ ҳақиқиро бармегардонад. Биёед як мисоли хурдеро дида бароем, то ин усулҳоро шарҳ диҳад:
public class StringCompareToExample {
public static void main(String[] args) {
String str = "ABC";
System.out.println(str.compareTo("DEF"));
System.out.println(str.compareToIgnoreCase("abc"));
}
}
Барнома инҳоро мебарорад:
-3
0
8. Чӣ тавр сатрро ба аломат ва баръакс табдил додан мумкин аст?
Ин саволи ҳиллаест, зеро сатр пайдарпаии аломатҳост, бинобар ин мо метавонем онро танҳо ба як аломат табдил диҳем. Мо метавонем усулероcharAt
барои ба даст овардани аломати дар ҷои муайян ҷойгиршуда истифода барем ё мо метавонем усули toCharArray()
табдил додани сатрро ба массиви аломатҳо истифода барем. Мисоли оддӣ нишон медиҳад, ки чӣ гуна табдил додани сатр ба аломат ва аломат ба сатр дар Java.
import java.util.Arrays;
public class StringToCharToString {
public static void main(String[] args) {
//String to char array
String str = "123";
char[] chArr = str.toCharArray();
System.out.println("String to char array: "+Arrays.toString(chArr));
//String to char
char c = str.charAt(1);
System.out.println("String to char: "+c);
//char to String
String s = Character.toString(c);
System.out.println("char to String: "+s);
//удалить все заданные символы из строки
System.out.println("removing all chars from String: "
+removeCharFromString("1ABCD12DW", '1'));
}
private static String removeCharFromString(String str, char c) {
return str.replaceAll(Character.toString( c ), "");
}
}
Барнома инҳоро мебарорад:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW
9. Чӣ тавр сатрро ба массиви byteӣ ва баръакс табдил додан мумкин аст?
Мо метавонем усулиgetBytes()
табдил додани сатрро ба массиви byte истифода барем ва мо метавонем конструкторро new String(byte[] arr)
барои табдил додани масси byte ба сатр истифода барем.
import java.util.Arrays;
public class StringByteArray {
public static void main(String[] args) {
String str = "www.journaldev.com";
//преобразование String в byte array
byte[] byteArr = str.getBytes();
System.out.println("String to byte array : "+Arrays.toString(byteArr));
//преобразование byte array и String
String str1 = new String(byteArr);
System.out.println("byte array to String : "+str1);
//посмотрим, str и str1 одинаковые or нет
System.out.println("str == str1? " + (str == str1));
System.out.println("str.equals(str1)? " + (str.equals(str1)));
}
}
Барнома инҳоро мебарорад:
String to byte array : [119, 119, 119, 46, 106, 111, 117, 114, 110, 97, 108, 100, 101, 118, 46, 99, 111, 109]
byte array to String : www.journaldev.com
str == str1? false
str.equals(str1)? true
10. Оё мо метавонем сатрро дар сохти коммутатор истифода барем?
Ин саволи ҷолиб барои санҷиши дониши шумо дар бораи рушди кунунии забон истифода мешавад. Java 7 изҳороти гузаришро барои истифодаи сатр васеъ мекунад; versionҳои қаблии Java инро дастгирӣ намекунанд. Агар шумо ҷараёни шартиро барои сатрҳо амалӣ карда истода бошед, шумо метавонед шартҳои if-else-ро истифода баред ва шумо метавонед изҳороти гузаришро истифода баред, агар шумо Java 7 ё навтарро истифода баред. Намунаи хурди истифодаи сатр дар изҳоротswitch
ва усули дигаре, ки мантиқи якхелаи истифодаи шартҳоро нишон медиҳад if-else
.
public class SwitchStringExample {
public static void main(String[] args) {
printColorUsingSwitch("red");
printColorUsingIf("red");
// оператор switch регистрозависимый
printColorUsingSwitch("RED");
printColorUsingSwitch(null);
}
private static void printColorUsingIf(String color) {
if (color.equals("blue")) {
System.out.println("BLUE");
} else if (color.equals("red")) {
System.out.println("RED");
} else {
System.out.println("INVALID COLOR CODE");
}
}
private static void printColorUsingSwitch(String color) {
switch (color) {
case "blue":
System.out.println("BLUE");
break;
case "red":
System.out.println("RED");
break;
default:
System.out.println("INVALID COLOR CODE");
}
}
}
Барнома инҳоро мебарорад:
RED
RED
INVALID COLOR CODE
Exception in thread "main"
java.lang.NullPointerException
at com.journaldev.util.SwitchStringExample.printColorUsingSwitch(SwitchStringExample.java:24)
at com.journaldev.util.SwitchStringExample.main(SwitchStringExample.java:10)
Нуқтаҳои асосии истифода switch
барои сатрҳо дар Java.
- истифодаи сатрҳо дар тарроҳӣ
switch
codeро тавассути аз байн бурдани якчанд занҷирҳои шартҳо хондан бештар мекунадif-else
. - сатрҳо ҳассос мебошанд
switch
, мисоли боло инро нишон медиҳад. - оператор
switch
усулиString.equals()
муқоисаи арзиши натиҷаро бо арзишҳои парванда истифода мебарад , аз ин рӯ чекро барои NULL илова кунед, то пешгирӣ кунедNullPointerException
. - Тибқи ҳуҷҷатҳои Java 7 барои сатрҳо дар
switch
, компилятори Java барои сатрҳо дар сохторswitch
назар ба шартҳои муттаҳидшуда bytecodeи муассиртар тавлид мекунадif-else
. - боварӣ ҳосил кунед, ки ин бо Java 7 ё дертар истифода мешавад, вагарна шумо
xception
.
11. Барномае нависед, ки тамоми ивазшавии сатрро чоп мекунад.
Ин як саволи душвор аст ва мо бояд барои пайдо кардани ҳама ивазкунии сатр рекурсияро истифода барем, масалан ивазкунии "AAB" метавонад "AAB", "ABA" ва "BAA" бошад. Мо инчунин бояд Set-ро истифода барем, то боварӣ ҳосил кунем, ки мо сатрҳои такрорӣ надорем. Барои ба даст овардани ҳама ивазкунӣ, мо аввал аломати аввали сатрро мегирем ва аломатҳои боқимондаро аз нав ҷойгир мекунем. Агар Сатр = "ABC" Аломати аввал = A ва ивазкунии боқимондаи BC ва CB. Акнун мо метавонем аломати аввалро ба мавқеъҳои мавҷуда дар ивазкунӣ дохил кунем. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Барномаи намунавӣ:import java.util.HashSet;
import java.util.Set;
public class StringHelper {
public static Set<String> permutationFinder(String str) {
Set<String> perm = new HashSet<String>();
//Handling error scenarios
if (str == null) {
return null;
} else if (str.length() == 0) {
perm.add("");
return perm;
}
char initial = str.charAt(0); // первый символ
String rem = str.substring(1); // полная строка без первого символа
Set<String> words = permutationFinder(rem);
for (String strNew : words) {
for (int i = 0;i<=strNew.length();i++){
perm.add(charInsert(strNew, initial, i));
}
}
return perm;
}
public static String charInsert(String str, char c, int j) {
String begin = str.substring(0, j);
String end = str.substring(j);
return begin + c + end;
}
public static void main(String[] args) {
String s = "AAC";
String s1 = "ABC";
String s2 = "ABCD";
System.out.println("\nPermutations for " + s + " are: \n" + permutationFinder(s));
System.out.println("\nPermutations for " + s1 + " are: \n" + permutationFinder(s1));
System.out.println("\nPermutations for " + s2 + " are: \n" + permutationFinder(s2));
}
}
Натиҷаи барнома:
Permutations for AAC are:
[AAC, ACA, CAA]
Permutations for ABC are:
[ACB, ABC, BCA, CBA, CAB, BAC]
Permutations for ABCD are:
[DABC, CADB, BCAD, DBAC, BACD, ABCD, ABDC, DCBA, ADBC, ADCB, CBDA, CBAD, DACB, ACBD, CDBA, CDAB, DCAB, ACDB, DBCA, BDAC, CABD, BADC, BCDA, BDCA]
Идомаи мақола
GO TO FULL VERSION