https://www.machinet.net/tutorial-eng/deep-dive-java-string-handling-manipulation