Skip to content

Commit 317a52c

Browse files
committed
Add 'Counting the Number of Characters' solution
Non-GUI version
1 parent 39b46c9 commit 317a52c

File tree

5 files changed

+99
-1
lines changed

5 files changed

+99
-1
lines changed

characters-count/build.gradle

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
id 'java'
3+
}
4+
5+
repositories {
6+
mavenCentral()
7+
}
8+
9+
dependencies {
10+
testImplementation(libs.assertj.core)
11+
testImplementation(libs.junit.jupiter)
12+
testRuntimeOnly(libs.junit.platform.launcher)
13+
}
14+
15+
tasks.named('test') {
16+
useJUnitPlatform()
17+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.craftsmanshipinsoftware.count;
2+
3+
import java.io.InputStream;
4+
import java.io.PrintStream;
5+
import java.util.Objects;
6+
import java.util.Scanner;
7+
8+
public class CharactersCounter {
9+
10+
private final InputStream inputStream;
11+
private final PrintStream printStream;
12+
13+
public CharactersCounter(InputStream inputStream, PrintStream printStream) {
14+
Objects.requireNonNull(inputStream, "inputStream must not be null");
15+
Objects.requireNonNull(printStream, "printStream must not be null");
16+
this.inputStream = inputStream;
17+
this.printStream = printStream;
18+
}
19+
20+
public void displayCharactersCount() {
21+
askForInput();
22+
String input = readInput();
23+
if (input == null || input.isBlank()) {
24+
this.printStream.println("Please enter something as input!");
25+
return;
26+
}
27+
this.printStream.printf("%s has %d characters.%n", input, input.length());
28+
}
29+
30+
private void askForInput() {
31+
System.out.print("What is the input string? ");
32+
}
33+
34+
private String readInput() {
35+
try (Scanner scanner = new Scanner(this.inputStream)) {
36+
return scanner.hasNext() ? scanner.nextLine() : null;
37+
}
38+
}
39+
40+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.craftsmanshipinsoftware.count;
2+
3+
public class Main {
4+
5+
public static void main(String[] args) {
6+
CharactersCounter charactersCounter = new CharactersCounter(System.in, System.out);
7+
charactersCounter.displayCharactersCount();
8+
}
9+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.craftsmanshipinsoftware.count;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.io.ByteArrayInputStream;
6+
import java.io.ByteArrayOutputStream;
7+
import java.io.PrintStream;
8+
import org.junit.jupiter.api.Test;
9+
10+
class CharactersCounterTests {
11+
12+
@Test
13+
void displayCharactersCount_GivenNoInput_ShouldAskToInputSomething() {
14+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
15+
CharactersCounter charactersCounter = new CharactersCounter(new ByteArrayInputStream(new byte[]{}), new PrintStream(outputStream));
16+
17+
charactersCounter.displayCharactersCount();
18+
19+
assertThat(outputStream).hasToString("Please enter something as input!" + System.lineSeparator());
20+
}
21+
22+
@Test
23+
void displayCharactersCount_GivenValidInput_ShouldDisplayCharactersCount() {
24+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
25+
CharactersCounter charactersCounter = new CharactersCounter(new ByteArrayInputStream("Durim".getBytes()), new PrintStream(outputStream));
26+
27+
charactersCounter.displayCharactersCount();
28+
29+
assertThat(outputStream).hasToString("Durim has 5 characters." + System.lineSeparator());
30+
}
31+
32+
}

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
rootProject.name = 'exercises-for-programmers-java'
2-
include('saying-hello')
2+
include('saying-hello', 'characters-count')

0 commit comments

Comments
 (0)