Java String trim() method with Example
In this post, we feature a comprehensive article about the Java String trim() method with Examples.
1. Introduction
The java.lang.String
class represents character strings. It provides a trim()
method since version 1.4 to return a new string object whose value is the copy of the original string without any leading or trailing white-space.
Note: a white-space is when the ASCII code of the character is less than or equal to the space character, which is \u0020
.
Here is the method syntax:
public String trim()
In this example, I will demonstrate how to trim a string in three ways:
- Create a
Function
totrim
a string in JDK 8 or higher version - Invoke
trim
for a non-nullString
object - Invoke
trim
for anOptional
String
object
2. Technologies Used
The example code in this article was built and run using:
- Java 1.8.101
- Maven 3.3.9
- Eclipse Oxygen
- JUnit 4.12
- H2
- Spring
3. Maven Project
I will create a Maven project via the Spring starter tool. Enter the group and artifact values and click the Generate Project
button. A maven project will be generated and downloaded to your workstation. Import it into your Eclipse work space.
3.1 Dependency
Add H2
dependency to pom.xml
.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jcg.zheng.demo</groupId> <artifactId>spring-string-trim-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-jparepository-demo</name> <description>Demo Spring Data JPA Application</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3.2 Spring Boot Application
I will save contacts into a H2
database table via Spring JpaRepositories
. You just need to add @EnableJpaRepositories
to the generated DemoApplication.java
file.
DemoApplication.java
package jcg.zheng.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @SpringBootApplication @EnableJpaRepositories(basePackages = "jcg.zheng.demo") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
3.3 Application Properties
Spring boot will configure a H2
data source based on the values in application.properties
.
application.properties
spring.datasource.url=jdbc:h2:file:~/main-source;AUTO_SERVER=TRUE spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name=org.h2.Driver
4. Contact
In this step, I will create a contact class that maps to a database table. It has several data members: id, first name, last name, and a title (optional). The Contact(String, String)
constructor uses setFirstName
and setLastName
to set the first name and last name with trimmed values.
Here are setters that trim a string in three ways:
setLastName
– it first creates a Java 8Function
totrim
a string with a method reference and then uses itsapply
method to set the last name value. Click my other article for details about Java 8 Function.setFirstName
– it calls thetrim
method on the first name.setTitle
– it invokes thetrim
method if a title exists.
Contact.java
package jcg.zheng.demo.entity; import java.util.Optional; import java.util.function.Function; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Transient; import org.springframework.util.StringUtils; @Entity public class Contact { @Id @GeneratedValue private Long id; private String firstName; private String lastName; @Transient private Optional<String> title; public Contact(String firstName, String lastName) { if (StringUtils.isEmpty(firstName) || StringUtils.isEmpty(lastName)) { throw new IllegalArgumentException("Require both firstName and lastName"); } setFirstName(firstName); setLastName(lastName); } public Long getId() { return id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName.trim(); } public String getLastName() { return lastName; } public void setLastName(String lastName) { Function<String, String> trimF = String::trim; this.lastName = trimF.apply(lastName); } public void setId(Long id) { this.id = id; } public Optional<String> getTitle() { return title; } public void setTitle(Optional<String> title) { this.title = title; if (title.isPresent()) { this.title = Optional.ofNullable(title.get().trim()); } } }
4.1 ContactTest
I will create several unit tests to demonstrate that the contact’s getFirstName
and getLastName
methods return a name without any leading and trailing white-spaces.
contact_happypath
– It constructs a contact object with the first name as" Mary Shan "
and last name as" Zheng Jr "
. Please note that both names have leading and trailing white-spaces. The last name also has white-spaces in the middle. With the help of thetrim
method, both leading and trailing white-spaces are removed and the white-spaces in the middle remains as expected.contact_has_title
– It sets contact’s title with ” Developer “. Please note that the leading and trailing white-spaces are removed whengetTitle()
returns.
ContactTest.java
package jcg.zheng.demo.entity; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Optional; import org.junit.Test; public class ContactTest { @Test public void contact_happypath() { Contact contact = new Contact(" Mary shan ", " Zheng Jr "); assertEquals("Mary shan", contact.getFirstName()); assertEquals("Zheng Jr", contact.getLastName()); } @Test(expected = Exception.class) public void contact_miss_names() { Contact contact = new Contact(null, ""); } @Test public void contact_has_no_title() { Contact contact = new Contact("Mary", "Zheng"); contact.setTitle(Optional.ofNullable(null)); assertFalse(contact.getTitle().isPresent()); } @Test public void contact_has_title() { Contact contact = new Contact("Mary ", "Zheng"); contact.setTitle(Optional.ofNullable(" Developer ")); assertTrue(contact.getTitle().isPresent()); assertEquals("Developer", contact.getTitle().get()); } }
4.2 Demo
Execute mvn test -Dtest=ContactTest
. All tests should pass. Capture the output here.
Test results
C:\JCG\spring-string-trim-demo>mvn test -Dtest=ContactTest [INFO] Scanning for projects... [INFO] [INFO] ---------------< jcg.zheng.demo:spring-string-trim-demo >--------------- [INFO] Building spring-jparepository-demo 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ spring-string-trim-demo --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ spring-string-trim-demo --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ spring-string-trim-demo --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\JCG\spring-string-trim-demo\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ spring-string-trim-demo --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ spring-string-trim-demo --- [INFO] Surefire report directory: C:\JCG\spring-string-trim-demo\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running jcg.zheng.demo.entity.ContactTest Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.242 sec - in jcg.zheng.demo.entity.ContactTest Results : Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
5. ContactRepository
I will create a ContactRepository
class to save contacts into a database without any leading and trailing white-spaces. Click here for my other article Spring JPARepository.
CommonRepository.java
package jcg.zheng.demo.repository; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import jcg.zheng.demo.entity.Contact; @Repository @Transactional public interface ContactRepository extends JpaRepository<Contact, Long> { @Query("SELECT con FROM Contact con WHERE con.lastName= (:lName)") List<Contact> findByLastName(@Param("lName") String lName); }
5.1 ContactRepositoryTest
We have a contact class whose constructor accepts first name and last name and three setter
methods trim a string. In this step, I will create test cases with three steps:
- Construct a contact with both leading and trailing white-spaces names.
- Save the contact into a H2 database table.
- Find the saved contact and check the saved values have no any leading and trailing white-spaces.
CommonRepositoryTest.java
package jcg.zheng.demo.repository; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.junit4.SpringRunner; import jcg.zheng.demo.entity.Contact; @RunWith(SpringRunner.class) @DataJpaTest public class ContactRepositoryTest { @Autowired private ContactRepository contactRepo; @Test public void it_can_find_the_contact_after_save_it() { Contact contact = new Contact(" Mary ", " Zheng"); contactRepo.save(contact); List contacts = contactRepo.findAll(); assertEquals(1, contacts.size()); assertEquals("Mary", contacts.get(0).getFirstName()); assertEquals("Zheng", contacts.get(0).getLastName()); } @Test public void it_can_find_contacts_by_name() { contactRepo.save(new Contact(" Mary", " Zheng ")); contactRepo.save(new Contact("Tom", "Smith")); contactRepo.save(new Contact("John", "Joe")); contactRepo.save(new Contact("Cindy ", "Zheng")); List contactsWithZheng = contactRepo.findByLastName("Zheng"); assertEquals(2, contactsWithZheng.size()); Contact foundMary = contactsWithZheng.stream() .filter(con -> con.getFirstName().equalsIgnoreCase("Mary")) .findFirst().get(); assertEquals("Mary", foundMary.getFirstName()); Contact foundCindy = contactsWithZheng.stream() .filter(con -> con.getFirstName().equalsIgnoreCase("Cindy")) .findAny().get(); assertEquals("Cindy", foundCindy.getFirstName()); contactsWithZheng = contactRepo.findByLastName(" Zheng "); assertEquals(0, contactsWithZheng.size()); } }
5.2 Demo
Execute mvn test -Dtest=ContactRepositoryTest
. All tests should pass. Capture the output as the following.
Test Results
2019-02-16 11:53:20.518 INFO 17644 --- [ main] j.z.d.repository.ContactRepositoryTest : Starting ContactRepositoryTest on S443831 with PID 17644 (started by aa00765 in C:\JCG\spring-string-trim-demo) 2019-02-16 11:53:20.519 INFO 17644 --- [ main] j.z.d.repository.ContactRepositoryTest : No active profile set, falling back to default profiles: default 2019-02-16 11:53:20.549 INFO 17644 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@12aba8be: startup date [Sat Feb 16 11:53:20 CST 2019]; root of context hierarchy 2019-02-16 11:53:21.505 INFO 17644 --- [ main] beddedDataSourceBeanFactoryPostProcessor : Replacing 'dataSource' DataSource bean with embedded version 2019-02-16 11:53:21.507 INFO 17644 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'dataSource' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Tomcat; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]] with [Root bean: class [org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration$EmbeddedDataSourceFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] 2019-02-16 11:53:22.090 INFO 17644 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory : Starting embedded database: url='jdbc:h2:mem:f15dc85a-1020-4cbb-8e97-688f3367bc69;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa' 2019-02-16 11:53:22.930 INFO 17644 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 2019-02-16 11:53:22.978 INFO 17644 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ name: default ...] 2019-02-16 11:53:23.162 INFO 17644 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.12.Final} 2019-02-16 11:53:23.167 INFO 17644 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found 2019-02-16 11:53:23.171 INFO 17644 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist 2019-02-16 11:53:23.317 INFO 17644 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 2019-02-16 11:53:23.711 INFO 17644 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 2019-02-16 11:53:24.499 INFO 17644 --- [ main] org.hibernate.tuple.PojoInstantiator : HHH000182: No default (no-argument) constructor for class: jcg.zheng.demo.entity.Contact (class must be instantiated by Interceptor) 2019-02-16 11:53:24.703 INFO 17644 --- [ main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export Hibernate: drop table contact if exists Hibernate: create table contact (id bigint generated by default as identity, first_name varchar(255), last_name varchar(255), primary key (id)) 2019-02-16 11:53:24.732 INFO 17644 --- [ main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete 2019-02-16 11:53:24.844 INFO 17644 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2019-02-16 11:53:25.279 INFO 17644 --- [ main] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory 2019-02-16 11:53:25.773 INFO 17644 --- [ main] j.z.d.repository.ContactRepositoryTest : Started ContactRepositoryTest in 6.167 seconds (JVM running for 11.505) 2019-02-16 11:53:25.976 INFO 17644 --- [ main] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@7c469c48 testClass = ContactRepositoryTest, testInstance = jcg.zheng.demo.repository.ContactRepositoryTest@4313f5bc, testMethod = it_can_find_contacts_by_name@ContactRepositoryTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@12e61fe6 testClass = ContactRepositoryTest, locations = '{}', classes = '{class jcg.zheng.demo.DemoApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[[ImportsContextCustomizer@7ee955a8 key = [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@467aecef, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2173f6d9, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@5bb21b69, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@351584c0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@c763d37b, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5ed828d], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@68ee3b6d]; rollback [true] Hibernate: insert into contact (id, first_name, last_name) values (null, ?, ?) Hibernate: insert into contact (id, first_name, last_name) values (null, ?, ?) Hibernate: insert into contact (id, first_name, last_name) values (null, ?, ?) Hibernate: insert into contact (id, first_name, last_name) values (null, ?, ?) Hibernate: select contact0_.id as id1_0_, contact0_.first_name as first_na2_0_, contact0_.last_name as last_nam3_0_ from contact contact0_ where contact0_.last_name=? Hibernate: select contact0_.id as id1_0_, contact0_.first_name as first_na2_0_, contact0_.last_name as last_nam3_0_ from contact contact0_ where contact0_.last_name=? 2019-02-16 11:53:26.246 INFO 17644 --- [ main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test context [DefaultTestContext@7c469c48 testClass = ContactRepositoryTest, testInstance = jcg.zheng.demo.repository.ContactRepositoryTest@4313f5bc, testMethod = it_can_find_contacts_by_name@ContactRepositoryTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@12e61fe6 testClass = ContactRepositoryTest, locations = '{}', classes = '{class jcg.zheng.demo.DemoApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[[ImportsContextCustomizer@7ee955a8 key = [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@467aecef, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2173f6d9, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@5bb21b69, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@351584c0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@c763d37b, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5ed828d], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]. 2019-02-16 11:53:26.262 INFO 17644 --- [ main] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@7c469c48 testClass = ContactRepositoryTest, testInstance = jcg.zheng.demo.repository.ContactRepositoryTest@949c598, testMethod = it_can_find_the_contact_after_save_it@ContactRepositoryTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@12e61fe6 testClass = ContactRepositoryTest, locations = '{}', classes = '{class jcg.zheng.demo.DemoApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[[ImportsContextCustomizer@7ee955a8 key = [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@467aecef, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2173f6d9, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@5bb21b69, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@351584c0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@c763d37b, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5ed828d], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@68ee3b6d]; rollback [true] Hibernate: insert into contact (id, first_name, last_name) values (null, ?, ?) Hibernate: select contact0_.id as id1_0_, contact0_.first_name as first_na2_0_, contact0_.last_name as last_nam3_0_ from contact contact0_ 2019-02-16 11:53:26.375 INFO 17644 --- [ main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test context [DefaultTestContext@7c469c48 testClass = ContactRepositoryTest, testInstance = jcg.zheng.demo.repository.ContactRepositoryTest@949c598, testMethod = it_can_find_the_contact_after_save_it@ContactRepositoryTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@12e61fe6 testClass = ContactRepositoryTest, locations = '{}', classes = '{class jcg.zheng.demo.DemoApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[[ImportsContextCustomizer@7ee955a8 key = [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@467aecef, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2173f6d9, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@5bb21b69, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@351584c0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@c763d37b, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5ed828d], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]. Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.687 sec - in jcg.zheng.demo.repository.ContactRepositoryTest 2019-02-16 11:53:26.392 INFO 17644 --- [ Thread-3] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@12aba8be: startup date [Sat Feb 16 11:53:20 CST 2019]; root of context hierarchy 2019-02-16 11:53:26.399 INFO 17644 --- [ Thread-3] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2019-02-16 11:53:26.400 INFO 17644 --- [ Thread-3] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export Hibernate: drop table contact if exists 2019-02-16 11:53:26.415 INFO 17644 --- [ Thread-3] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 28.066 s [INFO] Finished at: 2019-02-16T11:53:26-06:00 [INFO] ------------------------------------------------------------------------ C:\JCG\spring-string-trim-demo>
6. Java String trim() method – Summary
In this example, I demonstrated how to trim a string value in three ways:
- Create a
Function
totrim
a string in JDK8+ - Invoke
trim
for a non-nullString
object - Invoke
trim
for anOptional
String
object
7. Download the Source Code
This example consists of a Maven project which trims a string before saving it into a database table.
You can download the full source code of this example here: Java String trim() method with Example
Last updated on May 7th, 2020