diff --git a/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java b/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java index f04a36d301..3efe332994 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/util/StringHelper.java @@ -473,7 +473,20 @@ public final class StringHelper { } public static boolean isBlank(String string) { - return isEmpty( string ) || isEmpty( string.trim() ); + //TODO use Java 11's more efficient String#isBlank - currently we still require Java 8 compatibility + if ( string == null || string.isEmpty() ) { + return true; + } + else { + //Else: we need to check all characters, preferably without using String#trim() so to + //not allocate temporary strings + for ( int i = 0; i < string.length(); i++ ) { + if ( ! Character.isWhitespace( string.charAt( i ) ) ) { + return false; + } + } + return true; + } } /** diff --git a/hibernate-core/src/test/java/org/hibernate/test/util/StringHelperTest.java b/hibernate-core/src/test/java/org/hibernate/test/util/StringHelperTest.java index 545a638753..8e18cc04fd 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/util/StringHelperTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/util/StringHelperTest.java @@ -18,6 +18,7 @@ import org.hibernate.internal.util.StringHelper; import org.hibernate.testing.junit4.BaseUnitTestCase; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -44,6 +45,18 @@ public class StringHelperTest extends BaseUnitTestCase { assertEquals( "internal.util.StringHelper", StringHelper.partiallyUnqualify( STRING_HELPER_FQN, BASE_PACKAGE ) ); } + @Test + public void testIsBlank() { + assertFalse( StringHelper.isBlank( "A" ) ); + assertFalse( StringHelper.isBlank( " a" ) ); + assertFalse( StringHelper.isBlank( "a " ) ); + assertFalse( StringHelper.isBlank( "a\t" ) ); + assertTrue( StringHelper.isBlank( "\t\n" ) ); + assertTrue( StringHelper.isBlank( null ) ); + assertTrue( StringHelper.isBlank( "" ) ); + assertTrue( StringHelper.isBlank( " " ) ); + } + @Test public void testBasePackageCollapsing() { assertNull( StringHelper.collapseQualifierBase( null, BASE_PACKAGE ) );