19 Temmuz 2020 Pazar

String Sınıfı

Giriş
String kelimesinin nereden geldiğini açıklayan bir cevapları Origin of "string yazısında. 1918 yılında matematikçiler tarafından kullanılmış.

1. Java 8 ile bellek
String sınıfı kendi içinde hash alanını da saklar. Toplam 20 byte gerekir. Bu sayı 8'ın katı olan 24'e yuvarlanır. Yani bir string en az 24 byte yer ile başlar. Şöyledir.
String:
  Object header:         12 bytes
  Reference to char[]: +  4 bytes
  Integer value:       +  4 bytes
  Data size:           = 20 bytes
Total aligned size:    24 bytes
2. Java 9 ile bellek
Java 9 ile içerideki char [] dizisi byte [] ile değiştirildi. Böylece daha az bellek kullanılması sağlandı. Çünkü bir Java uygulamasındaki belleğin önemli bir kısmı String nesneleri tarafından kullanılıyor. Açıklaması şöyle
If you examine the memory being used by your Java application, you will most likely notice that a significant amount of the heap is allocated by String objects.
3. literal
String Literal derleyici tarafından String tipine çevrilir.

constructor - byte [] + encoding
Açıklaması şöyle. byte dizisi belirtilen encoding'e uygun olmalıdır.
The behavior of this constructor when the given bytes are not valid in the given charset is unspecified. The CharsetDecoder class should be used when more control over the decoding process is required.
Şöyle yaparız.
byte[] bytes = { ..., ... };
new String (bytes, "UTF-8");
constructor - byte [] + Charset
Açıklaması şöyle.
This method always replaces malformed-input and unmappable-character sequences with this charset's default replacement string. The CharsetDecoder class should be used when more control over the decoding process is required.
Örnek
byte[] dizisinin UTF-8 olduğunu varsayalım. Açıklaması şöyle.
What a real UTF-8 to String conversion does it to convert between 1 and 4 bytes (codeunits) representing a UTF-8 codepoint into 1 or 2 16-bit codeunits representing the same codepoint in UTF-16. That cannot be done using a plain memory copy.

CASE_INSENSITIVE_ORDER Alanı
String Sıralama yazısına taşıdım.

charAt metodu
Açıklaması şöyle.
The java string charAt() method returns a char value at the given index number. The index number starts from 0.
Metodu içi şöyle
public char charAt(int index) {
  if ((index < 0) || (index >= value.length)) {
    throw new StringIndexOutOfBoundsException(index);
  }
  return value[index];
}
Şöyle yaparız.Çıktı olarak "k" verir.
String name="StackExchange";  
char ch=name.charAt (4);//returns the char value at the 4th index  
System.out.println (ch);  
char int ile karşılaştırılabilir. Şöyle yaparız.
char ch = str.charAt(4);if( ch > 127 ){
  ...
}
chars metodu
String.chars() ve String.codePoints() Farkı yazısına taşıdım.

codePoints metodu
String.chars() ve String.codePoints() Farkı yazısına taşıdım.

compareToIgnoreCase metodu
String Sıralama yazısına taşıdım.

concat metodu
String Concatenation yazısına taşıdım.

contains metodu
Şöyle yaparız. contains() metodu indexOf () metoduna çok benzer. İkisi de belirtilen string'in kendi içimde olup olmadığını döner. Tek fark olarak contains() boolean dönerken indexOf () başlangıç konumunu belirtir.
String str1 = "...";
String str2 = "...";

if(str1.contains(str2)) {...}
describeConstable  metodu
String.describeConstable metodu yazısına taşıdım

format metodu
String Concatenation yazısına taşıdım.

formatted metodu
formatted metodu yazısına taşıdım

equals metodu
Şöyle yaparız.
String str = "...";
if(str.equals("...")){...}
equalsIgnoreCase metodu
Açıklaması şöyle
Two characters c1 and c2 are considered the same ignoring case if at least one of the following is true:
• Applying the method java.lang.Character.toUpperCase(char) to each character produces the same result
Sistem locale'ini kullanır. Aslında şu kod ile aynıdır.
String string1 = ...;
String string2 = ...;

if (string1.toUpperCase().equals(string2.toUpperCase()))
  System.out.println("equals says they are equal");
}
Eğer farklı bir locale kullanarak karşılaştırma yapmak istersek şöyle yaparız.
if (string1.toUpperCase(Locale.GERMAN).equals(string2.toUpperCase(Locale.GERMAN)))
Örnek
Şöyle yaparız.
String str = "...";
if(str.equalsIgnoreCase("...")) {...}
endsWith metodu
Örnek
Şöyle yaparız
String phrase = "I like bananas";
System.out.println(phrase.endsWith("bananas")); // true
System.out.println(phrase.endsWith("Tandrew")); // false
/* Output:
true
false
*/ 
getBytes metodu
İmzası şöyle
byte[] getBytes(Charset charset);
hashCode metodu
Şöyle yaparız.
String str = ...;
int code = str.hashCode();
indent metodu
String.indent metodu yazısına taşıdım

indexOf metodu
String.indexOf metodu yazısına taşıdım

intern metodu
JDK ilklenirken bazı string'leri kendisi inter() yaparak havuza dahil eder. Açıklaması şöyle.
When called, what it does is either:
* add the String to the internal pool if it didn't exist already;
* return the equivalent String from the pool if it already existed.
Açıklaması şöyle.
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.
Kurallar şöyle.
1.When a String object is created using a String literal, JVM checks if the String literal is already present in the pool. If the object exists in the pool, the same object is returned instead of a new object.
2.When a String object is created using a new operator, a new object is created even if the string exists in the string pool.
3.When you call the intern method on a String object, a new String object is created and put on the pool if it doesn't exist. The intern method returns the object from the pool.
Havuz büyüklüğü JDK'ya göre değişiyor. Açıklaması şöyle.
Prior to Java 7u40, the default pool size was 1009 buckets but this value was subject to a few changes in more recent Java versions. To be precise, the default pool size from Java 7u40 until Java 11 was 60013 and now it increased to 65536.
Örnek
Şöyle yaparız.
String s1 = "...";
String s2 = s1.intern();
isBlank metodu
Java 11 ile geliyor. Açıklaması şöyle
Indicates if the String is empty or contains only white space characters
Örnek
Şöyle yaparız
String str1 = "";
System.out.println(str1.isBlank()); //true

join metodu

String Concatenation yazısına taşıdım.

length metodu
Şöyle yaparız.
System.out.println("".length());
lines metodu
String.lines metodu yazısına taşıdım

matches metodu
Elimizde şöyle bir string olsun
String str = "\n  London";
Şöyle yaparız
System.out.println(str.matches("(?s).*London.*"));
(?s) şununla aynıdır
Pattern pattern = Pattern.compile(".*London.*", Pattern.DOTALL);
repeat metodu
String.repeat metodu yazısına taşıdım

replace metodu
İmzası şöyle. Düzenli ifade kullanmaz. Sıradan bir string'i bir başka string ile değiştirir.
CharSequence replace(CharSequence target, CharSequence replacement);
replaceAll metodu
Düzenli ifade kullanılır.

resolveConstantDesc metodu
String.resolveConstantDesc metodu yazısına taşıdım

split metodu
Şöyle yaparız.
String str = "Jan 12 1992";
String[] tokens = str.split("\\s+"); // <-- split on one or more spaces
strip metodu
Java 11 ile geliyor. Açıklaması şöyle. strip() metodu trim() ile aynı. Farklı olarak Unicode olarak çalışır.
Removes the white space from both, beginning and the end of string
Açıklaması şöyle
strip(), stripTrailing(), stripLeading() : These functions are the boost to trim(). It uses Unicode so it is much better than trim.
- stripTrailing() is used for removing the spaces at the end of the string. 
- On the other hand, stripLeading() is for removing the whitespace at the beginning. 
- With strip() both prefix and suffix whitespace gets removed.
stripLeading metodu
Java 11 ile geliyor. Açıklaması şöyle
Removes the white space from the beginning
stripTrailing metodu
Java 11 ile geliyor. Açıklaması şöyle
Removes the white space from the end
substring metodu - beginIndex
Üçüncü karakterden sona kadar olan kısmı almak için şöyle yaparız
String str = ...;
String str = str.substring (2);
substring - beginIndex, endIndex
10'ar 10'ar bölmek için şöyle yaparız.
String txtStr = ...;
int subStringSize = 10;

for (int start = 0; start < txtStr.length(); start += subStringSize) {
  txtStr.substring(start,
                   Math.min(txtStr.length(), start + subStringSize));
}
trim metodu
Örnek
Şöyle yaparız.
String s = "       text   ";
String trimmed = s.trim();

trimmed --> "text";
toCharArray metodu
Metodun içi şöyle.
public char[] toCharArray() {
  char result[] = new char[value.length];
  System.arraycopy(value, 0, result, 0, value.length);
  return result;
}
Şöyle yaparız.
String str = ...;
char[] chars = str.toCharArray();
toLowerCase metodu
Şöyle yaparız.
String str = "...";
str = str.toLowerCase;
transform metodu
String.transform metodu yazısına taşıdım

translateEscapes metodu
String.translateEscapes yazısına taşıdım

valueOf metodu - int
Metodun içi şöyle. Yani aslında kendisi bir iş yapmıyor.
public static String valueOf(int i) {
  return Integer.toString(i);
}
































Hiç yorum yok:

Yorum Gönder