<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>String - Kama Kaczmarek</title>
	<atom:link href="https://kamakaczmarek.net/tag/string/feed/" rel="self" type="application/rss+xml" />
	<link>https://kamakaczmarek.net/tag/string/</link>
	<description>Strona z materiałami dla uczniów i nauczycieli</description>
	<lastBuildDate>Thu, 20 Oct 2022 07:01:27 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>8. JAVA &#8211; klasa String i operacje na ciągach</title>
		<link>https://kamakaczmarek.net/8-java-klasa-string-i-operacje-na-ciagach/</link>
		
		<dc:creator><![CDATA[Kama]]></dc:creator>
		<pubDate>Thu, 06 May 2021 16:11:05 +0000</pubDate>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[klasa]]></category>
		<category><![CDATA[String]]></category>
		<guid isPermaLink="false">https://kamakaczmarek.net/?p=2574</guid>

					<description><![CDATA[<p>Klasa String służy do tworzenia obiektów znakowych. Nie ma &#8222;prostego&#8221; typu String. Deklaracja łańcucha znaków: String napis1 = "Hello World!";lubString napis2 = new String("Hello My World!"); Należy zapamiętać, że samo wykonanie operacji zmieniającej wartość łańcucha znaków, nie powoduje zapamiętania tej zmiany w programie, należy zmieniony ciąg przypisać do zmiennej. To tzw. niemutowalność ciągów. Podobnie jak [&#8230;]</p>
<p>Artykuł <a href="https://kamakaczmarek.net/8-java-klasa-string-i-operacje-na-ciagach/">8. JAVA &#8211; klasa String i operacje na ciągach</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Klasa String służy do tworzenia obiektów znakowych. Nie ma &#8222;prostego&#8221; typu String.</p>
<h4>Deklaracja łańcucha znaków:</h4>
<pre id="block-0ce36a3c-a575-480d-8411-29b88de39d09" class="block-editor-rich-text__editable wp-block-preformatted prettyprint block-editor-block-list__block wp-block is-selected rich-text" tabindex="0" role="group" contenteditable="true" aria-multiline="true" aria-label="Blok: Tekst formatowany" data-block="0ce36a3c-a575-480d-8411-29b88de39d09" data-type="core/preformatted" data-title="Tekst formatowany">String napis1 = "Hello World!";<br /><br />lub<br /><br />String napis2 = new String("Hello My World!");</pre>
<p>Należy zapamiętać, że samo wykonanie operacji zmieniającej wartość łańcucha znaków, nie powoduje zapamiętania tej zmiany w programie, należy zmieniony ciąg przypisać do zmiennej. To tzw. <em><strong>niemutowalność ciągów.</strong></em></p>
<p>Podobnie jak w przypadku Integera, klasa String ma mnóstwo <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">dostępnych funkcji wbudowanych</a>, gotowych do użycia. Oto kilka z nich:</p>
<p> </p>
<h4><em>toString</em>()</h4>
<p>ta metoda zwraca łańcuch, który „tekstowo reprezentuje” dany obiekt. Zaleca się, aby wszystkie podklasy zastępowały tę metodę. Szerzej o wykorzystaniu tej metody w późniejszych lekcjach.</p>
<pre class="prettyprint">String napis3 = "Kolejny nudny przykład.";<br />String s3 = napis3.toString();<br />System.out.println(s3);</pre>
<h4> </h4>
<h4><em>valueOf</em>()</h4>
<p>konwertuje różne typy zmiennych na łańcuchy. Za jej pomocą można przekonwertować int na string, long na string, boolean na string, character to string, float to string, double to string, object to string and char array to string.</p>
<pre class="prettyprint">boolean bol =  true;<br />int liczba = 10;<br />System.out.println("bool na string: " + String.valueOf(bol));<br />System.out.println("int na string: " + String.valueOf(liczba));<br />//itd....</pre>
<h4> </h4>
<h4>Powtarzanie ciągu<em>: repeat</em>()</h4>
<pre class="prettyprint">String repeatString = napis1.repeat(3);<br />System.out.println(repeatString);</pre>
<h4> </h4>
<h4>Łączenie ciągów: <em>+, concat(), join()</em></h4>
<pre class="prettyprint">//łączenie za pomocą +<br />System.out.println(napis1 + " złączony + z " + napis2);<br /><br />//łączenie za pomocą konkatenacji<br />System.out.println(napis1.concat(" złączony concat() z " + napis2));<br /><br />//łączenie funkcją join<br />String joinStrings = String.join(" - ", napis1, napis2, "to było połączenie");<br />System.out.println(joinStrings);<br /><br />//łączenie różnych typów danych<br />String s1 = "napis";<br />int l1 = 10;<br />String zlacz_plus = s1 + l1;<br />System.out.println(zlacz_plus); //ok<br /><br />//String zlacz_concat = s1.concat(l1);//błąd - musimy przekonwertować int na String<br />String zlacz_concat = s1.concat(Integer.toString(l1));//ok<br />System.out.println(zlacz_concat);<br /><br />String zlacz_join = String.join(" ", s1, Integer.toString(l1)); // tak jak powyżej, należy zmienić typ zmiennej<br />System.out.println(zlacz_join);</pre>
<h4> </h4>
<h4>Klasa StringBuilder</h4>
<p>to klasa, która pomaga łączyć wiele ciągów w aplikacjach jednowątkowych jej użycie jest wskazane, gdyż nie obciąża Garbage Collectora tak jak pozostałe operacje łączenia (istnieje jeszcze StringBuffer dla aplikacji wielowątkowych).</p>
<pre class="prettyprint">StringBuilder stringBuilder = new StringBuilder("Info: "); //tworzymy obiekt stringBuilder<br />stringBuilder.append(napis1); //dodaję do obiektu kolejny element<br />stringBuilder.append(" ");<br />stringBuilder.append(napis2);<br />stringBuilder.append(" ");<br />stringBuilder.append(napis3);<br />String calosc = stringBuilder.toString();<br />System.out.println(calosc);</pre>
<h4> </h4>
<h4>Zmiana ciągu znaków na inny<em>: replace() i replaceAll<br /></em></h4>
<pre class="prettyprint">//zmiana fragmentu ciągu na inny<br />String txt = napis1.replaceAll("pierwszy", "zmieniony");<br />System.out.println(txt);<br /><br />String txt1 = "Dog makes miau miau";<br />System.out.println(txt1.replaceAll("miau", "hau"));<br />//replaceAll zmienia wszystkie wystąpienia podanej sekwencji znaków, bez wzglęcu na to czy są to całe wyrazy, czy nie<br />System.out.println(txt1.replaceAll("mi", "h"));<br /><br />//zmiana pierwszego wystąpienia:<br />System.out.println(txt1.replaceFirst("miau", "hau"));</pre>
<h4> </h4>
<h4>Porównywanie ciągów<em>: ==, equals() i compareTo()</em></h4>
<p>ciągów znaków nie porównujemy jak typów prostych za pomocą ==, ponieważ porównanie to wskazuje jedynie czy porównywane elementy są w tej samej lokalizacji w pamięci. Przy porównywaniu ciągów znaków w ten sposób<br />możemy otrzymać fałszywie dodatnie wyniki. Do porównywania ciągów należy używać instrukcji equals()</p>
<pre class="prettyprint">String n1 = "Hello";<br />String n_temp = "He";<br />String n2 = n_temp + "llo";<br />String n3 = "Hello";<br />String n4 = "HELLO";<br />System.out.println(n1==n3); //działa przy małych ciągach<br />System.out.println(n1==n2); //błędnie wskazuje false<br /><br />//Porównanie treści<br />// equals - ważna wielkość liter<br />//zwracana jest wartość boolean<br />System.out.println("Wykorzystanie equals: " + n1.equals(n2));<br />System.out.println("Wykorzystanie equals: " + n1.equals(n4));<br /><br />//Porównanie treści - equalsIgnoreCase - nie ważna wielkość liter<br />System.out.println("Wykorzystanie equalsIgnoreCase: " + n2.equalsIgnoreCase(n4));<br /><br />//compareTo i CompareToIgnoreCase<br />//zwraca wartość liczbową 0 dla true<br />System.out.println("Wykorzystanie compareTo: " + n1.compareTo(n2));<br />System.out.println("Wykorzystanie compareTo: " + n1.compareTo(n4));<br /><br />//Porównanie treści - compareToIgnoreCase - nie ważna wielkość liter<br />System.out.println("Wykorzystanie compareToIgnoreCase: " + n2.compareToIgnoreCase(n4));</pre>
<h4> </h4>
<h4><em>isBlank() i isEmpty &#8211; </em>puste ciągi</h4>
<p>isBlank &#8211; zwraca true jeżeli ciąg zawiera białe znaki lub jego długość to 0<br />isEmpty &#8211; zwraca true jeżeli jego długość to 0</p>
<pre class="prettyprint">String blank_str = "  \n   ";<br />String empty_str = "";<br />System.out.println("blank_str.isBlank() daje " + blank_str.isBlank()); //true<br />System.out.println("empty_str.isBlank() daje " + empty_str.isBlank()); //true<br />System.out.println("blank_str.isEmpty() daje " + blank_str.isEmpty()); //false<br />System.out.println("empty_str.isEmpty() daje " + empty_str.isEmpty()); //true</pre>
<h4> </h4>
<h4>Określanie długości ciągu<em> &#8211; length()</em></h4>
<p>w przypadku length należy pamiętać, że nie wolno używać tej funkcji na obiekcie, który ma przypisany &#8222;null&#8221; &#8211; wygeneruje to błąd. Można natomiast stosować length do zmiennej, której wartość została zadeklarowana jako &#8222;&#8221;</p>
<pre class="prettyprint">System.out.println("Długość zdania \"" + napis1 + "\" to: " + napis1.length() + " znaki.");</pre>
<h4> </h4>
<h4><em>charAt &#8211; </em>wartość kryjąca się pod konkretnym indexem</h4>
<pre class="prettyprint">System.out.println("Znak w indeksie 0 zdania \"" + napis1 + "\" to: " + napis1.charAt(0));</pre>
<h4> </h4>
<h4><em>substring() &#8211;</em> wycinanie fragmentów ciągu</h4>
<pre class="prettyprint">String text1 = "abcdef";<br />System.out.println(text1.substring(3, 5)); // zwraca "de"<br />System.out.println(text1.substring(0, 2)); // zwraca "ab"<br />System.out.println(text1.substring(2)); // zwraca "cdef"<br />System.out.println(text1.substring(1)); // bcdef<br />System.out.println(text1.substring(1, 3)); // bc<br />System.out.println(text1.substring(0, 4)); // abcd</pre>
<h4> </h4>
<h4>Wyszukiwanie fragmentów w ciągu &#8211; <em>indexOf(), lastIndexOf(), startsWith(), endsWith()</em></h4>
<pre class="prettyprint">//indexOf - wyszukanie pierwszego wystąpienia tekstu w łańcuchu, jeżeli go nie ma to zwróci -1<br />String wystapienie = "Ala ma kota, a kot ma Alę.";<br />System.out.println("wystapienie.indexOf(\"kota\") zwraca " + wystapienie.indexOf("kota"));<br />System.out.println("wystapienie.indexOf(\"ta\") zwraca " + wystapienie.indexOf("ta"));<br />System.out.println("wystapienie.indexOf(\"x\") zwraca " + wystapienie.indexOf("x"));<br />//możemy wskazać index od którego zaczniemy szukać<br />System.out.println("wystapienie.indexOf(\"kot\", 11) zwraca " + wystapienie.indexOf("kot", 11));<br />System.out.println("wystapienie.indexOf(\"kot\", 16) zwraca " + wystapienie.indexOf("kot", 16));<br /><br /><br />//lastIndexOf - wyszukanie pierwszego wystąpienia tekstu w łańcuchu licząc od końca, jeżeli go nie ma to zwróci -1<br />System.out.println("wystapienie.lastIndexOf(\"kot\") zwraca " + wystapienie.lastIndexOf("kot"));<br />System.out.println("wystapienie.lastIndexOf(\"ta\") zwraca " + wystapienie.lastIndexOf("ta"));<br />System.out.println("wystapienie.lastIndexOf(\"x\") zwraca " + wystapienie.lastIndexOf("x"));<br />//możemy wskazać index od którego zaczniemy szukać<br />System.out.println("wystapienie.lastIndexOf(\"kot\", 11) zwraca " + wystapienie.lastIndexOf("kot", 11));<br />System.out.println("wystapienie.lastIndexOf(\"kot\", 16) zwraca " + wystapienie.lastIndexOf("kot", 16));<br /><br />//startsWith - zwraca true jeżeli podany ciąg zaczyna się od podanego wzorca<br />//endsWith - zwraca true jeżeli podany ciąg kończy się na podany wzorzec<br />//----------------------------<br />String startend = "Ala ma kota.";<br />System.out.println("startend.startsWith(\"Ala\") daje " + startend.startsWith("Ala")); //true<br />System.out.println("startend.startsWith(\"kot\") daje " + startend.startsWith("kot")); //false<br />System.out.println("startend.endsWith(\"ta.\") daje " + startend.endsWith("ta.")); //true<br />System.out.println("startend.endsWith(\"a\") daje " + startend.endsWith("a")); //false</pre>
<h4> </h4>
<h4>Usuwanie białych znaków &#8211; <em>trim(), stripLeading(), stripTrailing()</em></h4>
<pre class="prettyprint">String text = " To jest tekst z białymi znakami.   ";<br /><br />//trim() - usuwa białe znaki na pcczątku i na końcu ciągu<br />System.out.println(text.trim());<br /><br />//stripLeading - usuwa białe znaki na pcczątku ciągu<br />System.out.println(text.stripLeading());<br /><br />//stripTrailing - usuwa białe znaki na końcu ciągu<br />System.out.println(text.stripTrailing());</pre>
<h4> </h4>
<h4>Zmiana wielkości liter w ciągach &#8211; <em>toLowerCase(), toUpperCase()</em></h4>
<p>Funkcje(metody) zmieniające wielkość znaków w ciągu, odpowiednio na małe lub duże litery</p>
<pre class="prettyprint">System.out.println(text1.toUpperCase());<br />System.out.println(text1.toLowerCase());</pre>
<h4> </h4>
<h4>Łączenie metod<em><br /></em></h4>
<p>Czasami zachodzi potrzeba wykorzystania wielu metod na jednym ciągu (nie tyczy się to jedynie String)</p>
<pre class="prettyprint">//przykład zmiany całego ciągu na "Jak w zdaniu"<br />String zdanie = " tO jest Przykładowe zdAnie.   ";<br />System.out.println(zdanie.trim().substring(0,1).toUpperCase()+zdanie.trim().substring(1).toLowerCase());</pre>
<h4> </h4>
<h4><em>split() oraz toCharArray()</em></h4>
<p>dzielą ciąg znaków na tablicę i zostaną omówione w temacie Tablice</p>
<p> </p>
<p><strong>Zadanie 1:</strong></p>
<p>Napisz program, który wczyta od użytkownika jeden wyraz i wypisz liczbę znaków, z których się składa. Dla przykładu, dla podanego słowa nauka wypisze 5.</p>
<section class="entry-content ">
<p><strong>Zadanie 2:</strong></p>
<p>Napisz program, który z podanego tekstu:</p>
<p>text = 'JAVA jest popularnym językiem programowania&#8217;</p>
<p>wytnie dokładnie cztery pierwsze wyrazy. Przeprowadź standaryzację każdego wyrazu, tzn. zamień duże litery na małe. Wynik przedstaw w postaci listy i wydrukuj do konsoli.</p>
<p><em>Oczekiwany wynik:</em></p>
<p>[&#8217;python&#8217;, 'jest&#8217;, 'bardzo&#8217;, 'popularnym&#8217;]</p>
</section>
<p> </p>
<p><strong>Zadanie 3:</strong></p>
<p>Podany jest poniższy tekst:</p>
<p>text = &#8222;&#8221;&#8221;JAVA – język programowania wysokiego poziomu</p>
<p>ogólnego przeznaczenia, o rozbudowanym pakiecie bibliotek</p>
<p>standardowych, którego ideą przewodnią jest czytelność i</p>
<p>klarowność kodu źródłowego.&#8221;&#8221;&#8221;</p>
<p>Utwórz listę słów z podanego tekstu. Następnie dokonaj standaryzacji (zamień duże litery na małe, usuń znaki interpunkcyjne). Wydobądź tylko wyrazy z długością powyżej 10 znaków. Otrzymaną listę wydrukuj do konsoli:</p>
<p><em>Oczekiwany wynik:</em></p>
<p>&#8217;programowania&#8217;, 'przeznaczenia&#8217;, 'rozbudowanym&#8217;, 'standardowych&#8217;</p>
<p> </p>
<p>Artykuł <a href="https://kamakaczmarek.net/8-java-klasa-string-i-operacje-na-ciagach/">8. JAVA &#8211; klasa String i operacje na ciągach</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
