String Manipulation in Java with Useful Libraries

 
Objectives
utilize some useful Java libraries (classes)
e.g. String, Scanner, HashMap, and Random
6. Using Libraries
 
DIN61-222 Adv. Prog. (Java)
 
Semester 1, 2019-2020
 
1
 
1. 
Creating a String Object
 
 
String color 
=
 
"
blue";
String s
1 =
 new String(
"
hello 
"
);
char chs[] = {‘a’, ‘n’, ‘d’, ‘y’};
String s
2
 = new String(chs);
String s3
 
=
 s
1
 
+
 s
2
 
+
 
"
 davison
"
;
  // + is string 
concatenation
 
Four different ways
(there are more).
1
2
3
4
"hello "
 
s1
 
2
 
Testing Strings for Equality
 
s
1
.equals(s
2
)
lexicographical
 
(dictionary) 
comparison
returns true if 
s1
 and 
s2
 contain the same 
text
s
1
 
==
 s
2
returns true if 
s1
 and 
s2
 refer
ence
 the same 
object
 
Strings should always be compared with
 
equals()
 
continued
 
3
 
String t1 = "foo";
String t2 = "foo";
t1 == t2
 returns false since t1 and t2 are different
objects
 
t1.equals(t2)
 returns true since t1 and t2 contain the
same text
"foo"
 
t1
"foo"
 
t2
 
4
 
Comparing Strings
 
s
1
.compareTo(s
2
)
returns 
0
 if 
s
1
 and 
s
2
 are equal
returns < 
0
 if 
s
1
 < 
s
2
;   > 
0
 if 
s
1
 > 
s
2
s
1
.startsWith(
"
text
"
)
returns 
true
 if 
s
1
 starts with 
“text”
s
1
.endsWith(
"
text
"
)
returns true if 
s
1
 ends with 
“text”
 
5
 
Locating Things in Strings
 
s
1
.indexOf(
'
c
'
)
returns index position of 
first
 
‘c’
 in 
s
1
, otherwise -
1
s
1
.lastIndexOf(
'
c
'
)
returns index position of 
last
 
‘c’
 in 
s
1
, otherwise -
1
Both of these can also take string arguments:
s
1
.indexOf(
"
text
"
)
 
for text analysis
 
6
 
Extracting Substrings
 
s
1
.substring(
5
)
returns the substring starting at index position 
5
s
1
.substring(
1
, 
4
)
returns substring between positions 
1
 and 
3
note
: second argument is end position + 
1
 
7
 
Changing Strings
 
s
1
.replace(
'
a
'
, 
'
d
'
)
return 
new
 
S
tring
 object
; replace every 
‘a’
 by 
‘d’
s
1
.toLowerCase()
return 
new
 
S
tring
 object 
where every char has been
converted to lowercase
 
s
1
.trim()
return 
new
 
S
tring
 object 
where any white space before or
after the 
s
1
 text has been removed
 
8
 
Example
 
String s = "HELLO";
s.toLowerCase();
System.out.println(s);      // HELLO
 
String s1 = s.toLowerCase();
System.out.println(s1);     // hello
 
s = s.toLowerCase();
System.out.println(s);      // hello
"HELLO"
 
s
 
9
 
Other String Methods
 
The
re 
are 
many more
 
String
 methods!
e.g. 
s.length
()
Look at the Java documentation for the 
String
 class
.
Google for "String API Java 12"
 
10
 
11
 
Strings and Arrays
 
String[] msgs = new String[4];
msgs[0] = "hello";
msgs[1] = new String("hi");
 
String t = msgs[1];
t.toLowerCase();
msgs[1].toLowerCase();
t = msgs[1].toLowerCase();
What is built?
What is changed?
 
12
 
Objects Diagram
 
13
 
msgs
 
"hello"
 
Array Object
 
String
objects
 
0
 
1
 
2
 
3
 
"hi"
 
t
 
2.  Reading 
Input 
with Scanner
 
The 
Scanner
 
class reads 
tokens
 
(words) 
from an
input 
stream
.
 
The input is broken into tokens based on spaces
the 
token separator 
can be changed
 
The tokens 
are usual read in as
 Strings
 or
primitive
 types (e.g. int, float, char, double,
boolean).
 
14
 
Read an 
I
nteger from the 
K
eyboard
 
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
sc.close();
 
You specify the input token type by calling methods
like 
nextInt()
, 
nextDouble()
, etc.
 
continued
 
15
 
2.1. 
ConsoleAdd.java
 
 
import java.util.Scanner;
public class ConsoleAdd
{
  public static void main(String[] args)
  { Scanner s = new Scanner( System.in );
    System.out.print("Enter first integer: ")
    int x = s.nextInt();
    System.out.print("Enter second integer: ")
    int y = s.nextInt();
    s.close();
    System.out.println("Adding gives: " + (x+y) );
  }
}  // end of ConsoleAdd class
 
16
 
Usage
 
17
 
2.2. 
Read floats from a 
F
ile
 
 
Scanner sc =
   new Scanner(new 
File
("floats.txt"));
while (
 
sc.hasNextFloat()
 
)
  float f = sc.nextFloat();
sc.close();
Scanner
 
supports many 
nextXXX()
 and  
hasNextXXX()
methods
e.g. nextBoolean() and hasNextBoolean()
 
hasNextXXX()
 returns true if 
nextXXX()
 would
succeed.
 
18
 
FloatsAdd.java
 
import java.io.*;
import java.util.Scanner;
public class FloatsAdd
{
  public static void main(String[] args)
  {
    float num;
    float total = 
0.0
f;
    System.out.println("Openning " + args[
0]
);
            :
 
19
 
 
    try {
      Scanner sc = new Scanner( new File(args[
0]
) );
      while ( sc.hasNextFloat() ) {
        num = sc.nextFloat();
        System.out.println(num);
        total += num;
      }
      sc.close();
    }
    catch(FileNotFoundException e)
    { System.out.println("Error: " + args[
0]
 +
                                  " not found");  }
    System.out.println("Floats total = " + total );
  }
}  // end of FloatsAdd class
 
20
 
floats.txt Input File
 
21
 
Usage
 
22
 
3.  A Technical Support System
 
A technical support system
users can describe their software problems and get
advice instantly!
 
It read input from the user a line at a time, and
generates 'suitable' responses.
 
23
 
Execution
I type input
after the ">>" prompts.
 
24
 
What Classes and Methods?
 
Classes:
a top-level class: 
SupportSystem
it will execute a input-response loop
a class for obtaining input: 
InputReader
 a class for generating responses: 
Responder
Input
Processing
Response
 
InputReader
 
Responder
 
SupportSystem
 
25
 
 
SupportSystem Class Diagrams
 
26
 
SupportSystem Processing Loop
 
printWelcome();
 
String line, response
boolean finished = false;
while (!finished) {
  line = 
inputReader.getInput(
)
;
  if (
line.startsWith
("bye"))  // time to stop
    finished = true;
  else {
    response = 
responder.genResponse
(line)
    System.out.println( response );
  }
}
printGoodbye();
Input
Processing
and
Response
 
InputReader
 
Responder
 
27
 
Part of the String API Doc
 
28
 
4.  The InputReader Class
 
import java.util.*;
 
 
public class InputReader
{
  private 
Scanner
 
reader
;
 
 
  public InputReader()
  {  
reader = new Scanner( System.in );
  }
Java's name for
stdin / cin
 
continued
 
29
 
  public String getInput()
  // Read a line of text from standard input
  {
    System.out.print(">> "); // print prompt
    String inputLine = 
reader.nextLine
();
    return 
inputLine.trim().toLowerCase();
       // trim spaces, and make lowercase
  }  // end of getInput()
 
}  // end of InputReader class
 
30
 
Combining String Ops
 
 
String s1 = "    ANDREW   ";
s1 = s1.trim();           // "ANDREW"
s1 = s1.toLowerCase();    // "andrew"
or
 
String s1 = "    ANDREW   ";
s1 = s1.trim().toLowerCase();    // "andrew"
 
 
31
 
5.  The Responder Class
 
An input line is passed to the responder and, based on
the words in the line, the responder generates a String
response.
 
If none of the words are recognized, then a default
response is chosen at random.
 
continued
 
32
"I have a Windows problem"
"I"
"have"
"a"
"problem"
"crash"
"slow"
"Windows"
"Please reboot...."
"Get more memory..."
"Switch to Linux"
"Windows"
"
 
:
:
 
:
:
 
check each
word against
the keys in
a map
 
get a matching
value for the
response
 
split into words
 
key
 
value
a 
map
data
structure
 
the input line
 
continued
 
33
"Please tell me more."
"We don't support that OS."
"Upgrade your software."
 
:
:
an ArrayList
 
0
 
1
 
2
 
:
:
 
size-1
 
else 
randomly
select a default
response from an
ArrayList
 
use a random
number between
0 and size-1
 
34
 
6.  Maps
 
Maps are 
collections
 that contain 
pairs
 of objects.
a pair consists of a 
key
 and a 
value
 
A real-world Map example:
a telephone book
 
The programmer passes a key to the Map.get()
method, and it returns the matching value (or null).
name → phone no.
 
35
 
Using a Map
 
A HashMap with Strings as keys and values
"Charles Nguyen"
 
HashMap
"(531) 9392 4587"
"Lisa Jones"
"(402) 4536 4674"
"William H. Smith"
"(998) 5488 0123"
 
A telephone book
 
36
 
HashMap is called "Hash" "Map" because it is
implemented using hash functions internally, but that
is hidden from us.
think of it as a 
map
 
37
 
Coding a Map
 
HashMap <String, String> phoneBook =
          new 
HashMap
<String, String>();
 
phoneBook.
put
("Charles Nguyen", "(531) 9392 4587");
phoneBook.
put
("Lisa Jones", "(402) 4536 4674");
phoneBook.
put
("William H. Smith", "(998) 5488 0123");
 
 
String phoneNumber = phoneBook.
get
("Lisa Jones");
System.out.println( phoneNumber );
prints:  (402) 4536 4674
 
38
 
More on HashMap:
google for "HashMap API Java 12"
 
39
 
7.  Making Random Numbers
 
The library class 
Random
 
can be used to generate
random numbers
floats, ints, booleans, etc
 
import java.util.Random;
 
Random randomGen = new Random();
int r1 = randomGen.nextInt();
   // a random positive integer
int r2 = randomGen.nextInt(100);
   // an integer between 0 and 99
 
40
 
A Random Example
 
import java.util.Random;
 
public class ShowRandom
{
  public static void main(String[] args)
  {
    
Random randGen = new Random();
    System.out.println("10 random ints between 0 and 100");
    for (int i = 0; i < 10; i++)
      System.out.print( 
randGen.nextInt
(100) + "  ");
    System.out.println();
 
    System.out.println("\n5 floats between 0.0f and 1.0f");
    for (int i = 0; i < 5; i++)
      System.out.print( 
randGen.nextFloat
() + "  ");
    System.out.println();
  }
}  // end of ShowRandom class
 
41
 
More on Random:
google for "Random API Java 12"
 
42
 
8.  Implementing Responder
 
public class Responder
{
  private HashMap<String, String> 
respMap
;
  // map keywords strings to responses strings
  private ArrayList<String> 
defaultResps
;
  private Random 
ranGen
;
 
  public Responder()
  {
    
initResponses
();
    
initDefaultResponses
();
    ranGen = new Random();
  }  // end of Responder()
 
43
 
  private void initResponses()
  /* Build keywords and their associated responses
     into a map. */
  {
    
respMap = new HashMap<String, String>()
;
 
    
respMap.put
("crash",
        "Well, it never crashes on our system");
    
respMap.put
("configuration",
        "Tell me more about your configuration.");
       :
  } // end of initResponses()
 
44
 
  private void initDefaultResponses()
  // Build a list of default responses
  {
    
defaultResps = new ArrayList<String>();
 
    defaultResps.add("That sounds odd.");
    defaultResps.add("Please tell me more...");
         :
         :
  }  // end of initDefaultResponses()
 
45
 
  public String genResponse(String inputLine)
  // Generate a response from a given input line
  {
    String[] words = 
inputLine.split
(" ");
        // split line into words at spaces
    String response = null;
    for(int i=0; i < words.length; i++) {
      response = 
respMap.get
( words[i] );
      if (response != null)
        return response;
    }
       :
Another
String
method
 
46
 
    /* None of the words from the input line
     were recognized, so randomly select
     a default responses to return. */
    int i = 
ranGen.nextInt
( defaultResps.size());
                  //  0 to size-1
    return 
defaultResps.get
(i);
  }  // end of genResponse()
 
}  // end of Responder class
 
47
 
9. Self-study from java9fp
 
Read Chapter 14 (Strings, ...)
 
Download, compile, and run some of the examples
from this section and from Chapter 14
my code is on the course website in
<SITE>/Code/
the java9fp code is on the course website in
<SITE>/Other Code/java9fp/java9fp_examples.zip
 
 
48
Slide Note
Embed
Share

"Delve into the world of Java programming by utilizing essential libraries such as String, Scanner, HashMap, and Random. Learn different ways to create String objects, test for equality, compare strings, locate elements, extract substrings, and modify strings effectively. Enhance your understanding of Java programming with practical examples and tips for efficient string handling."

  • Java programming
  • String manipulation
  • Libraries
  • Text analysis
  • Java classes

Uploaded on Sep 20, 2024 | 1 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. DIN61-222 Adv. Prog. (Java) Semester 1, 2019-2020 6. Using Libraries Objectives utilize some useful Java libraries (classes) e.g. String, Scanner, HashMap, and Random Top Tip: google for <class name> API Java 12 1

  2. 1. Creating a String Object Four different ways (there are more). 1 String color = "blue"; s1 2 String s1 = new String("hello "); "hello " char chs[] = { a , n , d , y }; String s2 = new String(chs); 3 4 String s3 = s1 + s2 + " davison"; // + is string concatenation 2

  3. Testing Strings for Equality s1.equals(s2) lexicographical (dictionary) comparison returns true if s1 and s2 contain the same text s1 == s2 returns true if s1 and s2 reference the same object Strings should always be compared withequals() continued 3

  4. t1 "foo" t2 String t1 = "foo"; String t2 = "foo"; "foo" t1 == t2 returns false since t1 and t2 are different objects t1.equals(t2) returns true since t1 and t2 contain the same text 4

  5. Comparing Strings s1.compareTo(s2) returns 0 if s1 and s2 are equal returns < 0 if s1 < s2; > 0 if s1 > s2 s1.startsWith("text") returns true if s1 starts with text s1.endsWith("text") returns true if s1 ends with text 5

  6. Locating Things in Strings for text analysis s1.indexOf('c') returns index position of first c in s1, otherwise -1 s1.lastIndexOf('c') returns index position of last c in s1, otherwise -1 Both of these can also take string arguments: s1.indexOf("text") 6

  7. Extracting Substrings s1.substring(5) returns the substring starting at index position 5 s1.substring(1, 4) returns substring between positions 1 and 3 note: second argument is end position + 1 7

  8. Changing Strings s1.replace('a', 'd') return new String object; replace every a by d s1.toLowerCase() return new String object where every char has been converted to lowercase s1.trim() return new String object where any white space before or after the s1 text has been removed 8

  9. Example s "HELLO" String s = "HELLO"; s.toLowerCase(); System.out.println(s); // HELLO String s1 = s.toLowerCase(); System.out.println(s1); // hello s = s.toLowerCase(); System.out.println(s); // hello 9

  10. Other String Methods There are many more String methods! e.g. s.length() Look at the Java documentation for the String class. Google for "String API Java 12" 10

  11. 11

  12. Strings and Arrays String[] msgs = new String[4]; msgs[0] = "hello"; msgs[1] = new String("hi"); What is built? String t = msgs[1]; t.toLowerCase(); msgs[1].toLowerCase(); t = msgs[1].toLowerCase(); What is changed? 12

  13. Objects Diagram Array Object 2 3 msgs 1 0 t "hello" String objects "hi" 13

  14. 2. Reading Input with Scanner The Scannerclass reads tokens (words) from an input stream. The input is broken into tokens based on spaces the token separator can be changed The tokens are usual read in as Strings or primitive types (e.g. int, float, char, double, boolean). 14

  15. Read an Integer from the Keyboard Scanner sc = new Scanner(System.in); int i = sc.nextInt(); sc.close(); You specify the input token type by calling methods like nextInt(), nextDouble(), etc. continued 15

  16. 2.1. ConsoleAdd.java import java.util.Scanner; public class ConsoleAdd { public static void main(String[] args) { Scanner s = new Scanner( System.in ); System.out.print("Enter first integer: ") int x = s.nextInt(); System.out.print("Enter second integer: ") int y = s.nextInt(); s.close(); System.out.println("Adding gives: " + (x+y) ); } } // end of ConsoleAdd class 16

  17. Usage 17

  18. 2.2. Read floats from a File Scanner sc = new Scanner(new File("floats.txt")); while (sc.hasNextFloat()) float f = sc.nextFloat(); sc.close(); Scannersupports many nextXXX() and hasNextXXX() methods e.g. nextBoolean() and hasNextBoolean() hasNextXXX() returns true if nextXXX() would succeed. 18

  19. FloatsAdd.java import java.io.*; import java.util.Scanner; public class FloatsAdd { public static void main(String[] args) { float num; float total = 0.0f; System.out.println("Openning " + args[0]); : 19

  20. try { Scanner sc = new Scanner( new File(args[0]) ); while ( sc.hasNextFloat() ) { num = sc.nextFloat(); System.out.println(num); total += num; } sc.close(); } catch(FileNotFoundException e) { System.out.println("Error: " + args[0] + " not found"); } System.out.println("Floats total = " + total ); } } // end of FloatsAdd class 20

  21. floats.txt Input File 21

  22. Usage 22

  23. 3. A Technical Support System A technical support system users can describe their software problems and get advice instantly! It read input from the user a line at a time, and generates 'suitable' responses. 23

  24. I type input after the ">>" prompts. Execution 24

  25. What Classes and Methods? Classes: a top-level class: SupportSystem it will execute a input-response loop a class for obtaining input: InputReader a class for generating responses: Responder SupportSystem InputReader Input Processing Responder Response 25

  26. SupportSystem Class Diagrams 26

  27. SupportSystem Processing Loop InputReader Input printWelcome(); Processing and Response String line, response boolean finished = false; while (!finished) { line = inputReader.getInput(); if (line.startsWith("bye")) // time to stop finished = true; else { response = responder.genResponse(line) System.out.println( response ); } } printGoodbye(); Responder 27

  28. Part of the String API Doc 28

  29. 4. The InputReader Class import java.util.*; public class InputReader { private Scannerreader; Java's name for stdin / cin public InputReader() { reader = new Scanner( System.in ); } continued 29

  30. public String getInput() // Read a line of text from standard input { System.out.print(">> "); // print prompt String inputLine = reader.nextLine(); return inputLine.trim().toLowerCase(); // trim spaces, and make lowercase } // end of getInput() } // end of InputReader class 30

  31. Combining String Ops String s1 = " ANDREW "; s1 = s1.trim(); // "ANDREW" s1 = s1.toLowerCase(); // "andrew" or String s1 = " ANDREW "; s1 = s1.trim().toLowerCase(); // "andrew" 31

  32. 5. The Responder Class An input line is passed to the responder and, based on the words in the line, the responder generates a String response. If none of the words are recognized, then a default response is chosen at random. continued 32

  33. the input line "I have a Windows problem" split into words a map data structure "I" "have" "a" "Windows" " key "problem" check each word against the keys in a map value "crash" "Please reboot...." "slow" "Get more memory..." get a matching value for the response "Windows" : : "Switch to Linux" : : continued 33

  34. an ArrayList else randomly select a default response from an ArrayList 0 "Please tell me more." "We don't support that OS." 1 2 : : "Upgrade your software." : : use a random number between 0 and size-1 size-1 34

  35. 6. Maps Maps are collections that contain pairs of objects. a pair consists of a key and a value A real-world Map example: a telephone book name phone no. The programmer passes a key to the Map.get() method, and it returns the matching value (or null). 35

  36. Using a Map A HashMap with Strings as keys and values HashMap "Charles Nguyen" "(531) 9392 4587" "Lisa Jones" "(402) 4536 4674" "William H. Smith" "(998) 5488 0123" A telephone book 36

  37. HashMap is called "Hash" "Map" because it is implemented using hash functions internally, but that is hidden from us. think of it as a map 37

  38. Coding a Map HashMap <String, String> phoneBook = new HashMap<String, String>(); phoneBook.put("Charles Nguyen", "(531) 9392 4587"); phoneBook.put("Lisa Jones", "(402) 4536 4674"); phoneBook.put("William H. Smith", "(998) 5488 0123"); String phoneNumber = phoneBook.get("Lisa Jones"); System.out.println( phoneNumber ); prints: (402) 4536 4674 38

  39. More on HashMap: google for "HashMap API Java 12" 39

  40. 7. Making Random Numbers The library class Randomcan be used to generate random numbers floats, ints, booleans, etc import java.util.Random; Random randomGen = new Random(); int r1 = randomGen.nextInt(); // a random positive integer int r2 = randomGen.nextInt(100); // an integer between 0 and 99 40

  41. A Random Example import java.util.Random; public class ShowRandom { public static void main(String[] args) { Random randGen = new Random(); System.out.println("10 random ints between 0 and 100"); for (int i = 0; i < 10; i++) System.out.print( randGen.nextInt(100) + " "); System.out.println(); System.out.println("\n5 floats between 0.0f and 1.0f"); for (int i = 0; i < 5; i++) System.out.print( randGen.nextFloat() + " "); System.out.println(); } } // end of ShowRandom class 41

  42. More on Random: google for "Random API Java 12" 42

  43. 8. Implementing Responder public class Responder { private HashMap<String, String> respMap; // map keywords strings to responses strings private ArrayList<String> defaultResps; private Random ranGen; public Responder() { initResponses(); initDefaultResponses(); ranGen = new Random(); } // end of Responder() 43

  44. private void initResponses() /* Build keywords and their associated responses into a map. */ { respMap = new HashMap<String, String>(); respMap.put("crash", "Well, it never crashes on our system"); respMap.put("configuration", "Tell me more about your configuration."); : } // end of initResponses() 44

  45. private void initDefaultResponses() // Build a list of default responses { defaultResps = new ArrayList<String>(); defaultResps.add("That sounds odd."); defaultResps.add("Please tell me more..."); : : } // end of initDefaultResponses() 45

  46. public String genResponse(String inputLine) // Generate a response from a given input line { String[] words = inputLine.split(" "); // split line into words at spaces Another String method String response = null; for(int i=0; i < words.length; i++) { response = respMap.get( words[i] ); if (response != null) return response; } : 46

  47. /* None of the words from the input line were recognized, so randomly select a default responses to return. */ int i = ranGen.nextInt( defaultResps.size()); // 0 to size-1 return defaultResps.get(i); } // end of genResponse() } // end of Responder class 47

  48. 9. Self-study from java9fp Read Chapter 14 (Strings, ...) Download, compile, and run some of the examples from this section and from Chapter 14 my code is on the course website in <SITE>/Code/ the java9fp code is on the course website in <SITE>/Other Code/java9fp/java9fp_examples.zip 48

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#