summary refs log tree commit diff stats
path: root/java/text/StringOperations.typ
blob: 210e4a9852a22c558ab9a0ad47fe05b31ef5f9d5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#import "/template.typ": *
#show: A => apply(A)
#set raw(lang: "java-new")
#set par(leading: 0.55em)

#assignment(3)[
  Write a menu-driven program to create a class with a String member variable and perform basic string operations:
  #box(align(left, [
  - count the number of words,
  - case-insensitively check whether the string is palindrome, and
  - reverse the string.]))
]

#scos("StringOperations")

=== Discussion

#skind[Classes, interfaces and methods used from Java standard library]

- `java.util.Scanner` Class:
  - Method `String nextLine()`: Scan a line of text as a string from the the input stream.
- `java.lang.String` Class:
  - `int length()` method: Returns the length of the string.
  - `char charAt(int)`: Returns the character in the string at the provided position.
  - `char[] toCharArray()`: Returns an array of characters corresponding to the string.
  - `static String copyValueOf(char[])`: Creates a new string from the provided character array.
  
#skind[Classes and methods implemented in the program]

- `MyString` Class:
  Provides the methods implementing the specified operations.
  - `String str` is the underlying string object upon which the operations are to be performed.
  - Constructor `MyString(String)`: Create an object of this class for the provided string.
  - `String valueOf()`: Returns the underlying string object.
  - `int countWords()`: Counts the words in the underlying string manually by  iterating over the characters in the string.
  - `MyString reverse()`: Returns a new object of MyString with the underlying string reversed manually by iterating over characters.
  - `MyString toLowerCase()`: Returns a new object of MyString with its characters manually converted to lower-case.
  - `boolean equals(MyString)`: Check whether the underlying strings are equal by comparing the arrays of characters.
  - `boolean isCaseInsensitivePalindrome()`: Checks whether the underlying string is a palindrome case-insensitively using the `reverse()`, `toLowerCase()` and `equals()` method.
- The `StringOperations` orchestrates the main program with:
  - `static void menu()`: Displays the menu.
  - `public static void main(String[])`: Implements a menu-driven program for the specified string operations.


#signature()
;, "2", "3", "4", "5", "6", "7", "8", "9", NULL }; #define LAYOUTS \ static Layout layout[] = { \ /* symbol function */ \ { "[]=", tile }, /* first entry is default */ \ { "><>", versatile }, \ }; #define KEYS \ static Key key[] = { \ /* modifier key function argument */ \ { MODKEY|ShiftMask, XK_Return, spawn, \ { .cmd = "exec uxterm -bg '#222' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" } }, \ { MODKEY, XK_p, spawn, \ { .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \ " | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' " \ "-sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"')\" && exec $exe" } }, \ { MODKEY, XK_j, focusnext, { 0 } }, \ { MODKEY, XK_k, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ { MODKEY, XK_g, resizemaster, { .i = 15 } }, \ { MODKEY, XK_s, resizemaster, { .i = -15 } }, \ { MODKEY, XK_i, incnmaster, { .i = 1 } }, \ { MODKEY, XK_d, incnmaster, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_0, tag, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \ { MODKEY|ShiftMask, XK_4, tag, { .i = 3 } }, \ { MODKEY|ShiftMask, XK_5, tag, { .i = 4 } }, \ { MODKEY|ShiftMask, XK_6, tag, { .i = 5 } }, \ { MODKEY|ShiftMask, XK_7, tag, { .i = 6 } }, \ { MODKEY|ShiftMask, XK_8, tag, { .i = 7 } }, \ { MODKEY|ShiftMask, XK_9, tag, { .i = 8 } }, \ { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \ { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \ { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \ { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \ { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, { .i = 4 } }, \ { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, { .i = 5 } }, \ { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, { .i = 6 } }, \ { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \ { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY, XK_space, setlayout, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \ { MODKEY, XK_0, view, { .i = -1 } }, \ { MODKEY, XK_1, view, { .i = 0 } }, \ { MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \ { MODKEY, XK_4, view, { .i = 3 } }, \ { MODKEY, XK_5, view, { .i = 4 } }, \ { MODKEY, XK_6, view, { .i = 5 } }, \ { MODKEY, XK_7, view, { .i = 6 } }, \ { MODKEY, XK_8, view, { .i = 7 } }, \ { MODKEY, XK_9, view, { .i = 8 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ { MODKEY|ControlMask, XK_4, toggleview, { .i = 3 } }, \ { MODKEY|ControlMask, XK_5, toggleview, { .i = 4 } }, \ { MODKEY|ControlMask, XK_6, toggleview, { .i = 5 } }, \ { MODKEY|ControlMask, XK_7, toggleview, { .i = 6 } }, \ { MODKEY|ControlMask, XK_8, toggleview, { .i = 7 } }, \ { MODKEY|ControlMask, XK_9, toggleview, { .i = 8 } }, \ { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ }; #define RULES \ static Rule rule[] = { \ /* class:instance:title regex tags regex isversatile */ \ { "Firefox", "3", False }, \ { "Gimp", NULL, True }, \ { "MPlayer", NULL, True }, \ { "Acroread", NULL, True }, \ };