Java camelcase to snake case

Java Utililty Methods String Snake Case

Method

if (camelCase == null) < throw new NullPointerException(); String[] parts = camelCase.split(SNAKE_CASE_SPLIT_REGEX); StringBuilder builder = new StringBuilder(camelCase.length() + (parts.length - 1)); for (int i = 0; i < parts.length - 1; i++) < builder.append(parts[i].toLowerCase()).append('_'); builder.append(parts[parts.length - 1].toLowerCase()); return builder.toString();
return s.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
String dst = new String(); for (int i = 0; i < src.length(); i++) < char c = src.charAt(i); if ('A' 'Z') < c += 32; if (i != 0) < dst += '_'; dst += c; return dst;
return str.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
StringBuilder sb = new StringBuilder(); for (char c : str.toCharArray()) < if (Character.isLetter(c) || Character.isDigit(c)) < if (Character.isUpperCase(c)) < if (sb.length() > 0) < sb.append("_"); sb.append(Character.toLowerCase(c)); .
return changeSeparator(str, '_', capitalize, null, upper);

Источник

Преобразовать названия из cameCase в snake_case.

Дан массив названий переменных в camelCase. Преобразовать названия в snake_case.
Помогите по-братски. Желательно без Array листов, коллекций и т.д., т.п.

Дан массив названий переменных в camelCase. Преобразовать названия в snake_case
Дан массив названий переменных в camelCase. Преобразовать названия в snake_case. Подскажите.

Конвертировать из PascalCase в snake_case
сделал так, но почему-то, некоторые сточки обрезаются, хотелось бы услышать советов или кто-нибудь.

Запрос названия лекарства, его цены и названия аптеки, в котором оно
Помогите пожалуйста составить запрос. Есть 2 таблицы. в 1й(apt) id аптеки и её название, в 2й(lek).

Читайте также:  Php file connection refused

Эксперт PythonЭксперт Java

ЦитатаСообщение от iSmokeJC Посмотреть сообщение

String[] strings = new String[]{"SomeString", "CamelCase", "SnakeCase"};

Эксперт PythonЭксперт Java

Лучший ответ

Сообщение было отмечено barca22 как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
package com.company; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String[] strings = {"SomeString", "CamelCase", "SnakeCase"}; Pattern p = Pattern.compile("\\B([A-Z])"); for (int i = 0; i  strings.length; i++) { Matcher m = p.matcher(strings[i]); StringBuffer strb = new StringBuffer(); while (m.find()) { m.appendReplacement(strb, "_$0"); } m.appendTail(strb); strings[i] = strb.toString().toLowerCase(); } System.out.println(Arrays.toString(strings)); } }

Даны названия 2 сторон. Присвоить эти названия переменным величинам s1 и s2
Даны названия 2 сторон. Присвоить эти названия переменным величинам s1 и s2, после чего название s2.

Можно ли в один перечислимый тип включить и названия месяцев, и названия шахматных фигур?
1)Кто определяет, какие имена должны входить в перечислимый тип ? Можно ли в один перечислимый тип.

Поменять местами названия двух гоpодов, названия котоpых оканчиваются сочетанием букв «гpад»
Задан список из десяти гоpодов. Поменять местами названия двух гоpодов, названия котоpых.

Запретить изменение названия программы или возврат названия
Создал программу, при закрытии которой она удаляется. Но. если сменить название программы пока.

Есть названия трёх городов. Вывести самое длинное и короткое названия, количество символов в них
Обязательный старт — запись названий в строку, или в отдельные строки. При таком выполнении.

Открыть папку и сверить названия из БД и названия картинок в папке; если они совпадают — сделать превью
Мне нужно открыть папку и сверить названия из бд и названия картинок в папке, если они совподают.

Источник

nagypet / CaseConverter.java

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

/**
* Camel case to underscores (examles CamelCase -> CAMEL_CASE)
* @param camel camel case
* @return underscores
*/
public static String camelCaseToUnderscores ( String camel )
StringBuilder sb = new StringBuilder ();
for ( int i = 0 ; i < camel . length (); i ++)
Character actualChar = camel . charAt ( i );
Character prevChar = i > 0 ? camel . charAt ( i — 1 ) : null ;
Character nextChar = i < camel . length () - 1 ? camel . charAt ( i + 1 ) : null ;
if ( i > 0 && ( isUpperCase ( actualChar ) && isLowerCase ( nextChar )
|| isUpperCase ( actualChar ) && isLowerCase ( prevChar )))
sb . append ( «_» );
sb . append ( actualChar );
>
else
sb . append ( actualChar );
>
>
return sb . toString (). toUpperCase ();
>
private static boolean isUpperCase ( Character character )
if ( character == null )
return false ;
>
return Character . isDigit ( character ) || Character . isUpperCase ( character );
>
private static boolean isLowerCase ( Character character )
if ( character == null )
return false ;
>
return ! Character . isDigit ( character ) && Character . isLowerCase ( character );
>

Источник

Java Utililty Methods String Snake Case

Method

if (camelCase == null) < throw new NullPointerException(); String[] parts = camelCase.split(SNAKE_CASE_SPLIT_REGEX); StringBuilder builder = new StringBuilder(camelCase.length() + (parts.length - 1)); for (int i = 0; i < parts.length - 1; i++) < builder.append(parts[i].toLowerCase()).append('_'); builder.append(parts[parts.length - 1].toLowerCase()); return builder.toString();
return s.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
String dst = new String(); for (int i = 0; i < src.length(); i++) < char c = src.charAt(i); if ('A' 'Z') < c += 32; if (i != 0) < dst += '_'; dst += c; return dst;
return str.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
StringBuilder sb = new StringBuilder(); for (char c : str.toCharArray()) < if (Character.isLetter(c) || Character.isDigit(c)) < if (Character.isUpperCase(c)) < if (sb.length() > 0) < sb.append("_"); sb.append(Character.toLowerCase(c)); .
return changeSeparator(str, '_', capitalize, null, upper);

Источник

How to map camelCase properties to snake_case column names with Hibernate

Imagine having a tool that can automatically detect JPA and Hibernate performance issues. Wouldn’t that be just awesome?

Well, Hypersistence Optimizer is that tool! And it works with Spring Boot, Spring Framework, Jakarta EE, Java EE, Quarkus, or Play Framework.

So, enjoy spending your time on the things you love rather than fixing performance issues in your production system on a Saturday night!

Introduction

In this article, you are going to learn how to map cameCase entity properties (e.g., phoneNumber ) to snake_case column names (e.g., phone_number ) using a Hibernate naming strategy.

While you could achieve the same goal with the name attribute of JPA @Column annotation, it’s much more convenient to use a custom Hibernate strategy to apply this naming convention consistently.

Domain Model

Let’s assume we are using the following BookAuthor and PaperBackBook entities in our application:

How to map camelCase properties to snake_case column names with Hibernate

The JPA entities are mapped like this:

@Entity(name = "BookAuthor") public class BookAuthor < @Id private Long id; private String firstName; private String lastName; //Getters and setters omitted for brevity >@Entity(name = "PaperBackBook") public class PaperBackBook < @Id @GeneratedValue( strategy = GenerationType.SEQUENCE ) private Long id; @NaturalId private String ISBN; private String title; private LocalDate publishedOn; @ManyToOne(fetch = FetchType.LAZY) private BookAuthor publishedBy; //Getters and setters omitted for brevity >

Database schema associated with the default JPA mapping

If we generate the database schema using the hbm2dll tool, the following DDL statements are going to be executed:

CREATE SEQUENCE hibernate_sequence START WITH 1 INCREMENT BY 1 CREATE TABLE BookAuthor ( id BIGINT NOT NULL, firstName VARCHAR(255), lastName VARCHAR(255), PRIMARY KEY (id) ) CREATE TABLE PaperBackBook ( id BIGINT NOT NULL, ISBN VARCHAR(255), publishedOn DATE, title VARCHAR(255), publishedBy_id BIGINT, PRIMARY KEY (id) )

By default, Hibernate assumes the entity class name as well as the property names when mapping the JPA entities to the underlying database tables. However, while the cameCase naming convention is fine for Java code, we want to use the snake_case naming convention for the database schema. Luckily, Hibernate is very extensible so we can achieve this goal using a custom naming strategy.

Naming strategy

Since Hibernate 5, the database object naming strategy is represented by the PhysicalNamingStrategy interface which we can customize to automatically transform database identifiers from cameCase to snake_case.

public class CamelCaseToSnakeCaseNamingStrategy extends PhysicalNamingStrategyStandardImpl < public static final CamelCaseToSnakeCaseNamingStrategy INSTANCE = new CamelCaseToSnakeCaseNamingStrategy(); public static final String CAMEL_CASE_REGEX = "([a-z]+)([A-Z]+)"; public static final String SNAKE_CASE_PATTERN = "$1\\_$2"; @Override public Identifier toPhysicalCatalogName( Identifier name, JdbcEnvironment context) < return formatIdentifier( super.toPhysicalCatalogName(name, context) ); >@Override public Identifier toPhysicalSchemaName( Identifier name, JdbcEnvironment context) < return formatIdentifier( super.toPhysicalSchemaName(name, context) ); >@Override public Identifier toPhysicalTableName( Identifier name, JdbcEnvironment context) < return formatIdentifier( super.toPhysicalTableName(name, context) ); >@Override public Identifier toPhysicalSequenceName( Identifier name, JdbcEnvironment context) < return formatIdentifier( super.toPhysicalSequenceName(name, context) ); >@Override public Identifier toPhysicalColumnName( Identifier name, JdbcEnvironment context) < return formatIdentifier( super.toPhysicalColumnName(name, context) ); >private Identifier formatIdentifier( Identifier identifier) < if (identifier != null) < String name = identifier.getText(); String formattedName = name .replaceAll( CAMEL_CASE_REGEX, SNAKE_CASE_PATTERN) .toLowerCase(); return !formattedName.equals(name) ? Identifier.toIdentifier( formattedName, identifier.isQuoted() ) : identifier; >else < return null; >> >

You don’t even need to create the aforementioned naming strategy class. You can get it via the Hypersistence Utils Maven dependency:

 io.hypersistence hypersistence-utils-hibernate-60 $ 

In order to use the CamelCaseToSnakeCaseNamingStrategy custom naming strategy, you need to supply it to Hibernate via the hibernate.physical_naming_strategy configuration property.

If you’re using Spring Boot, you can do it like this:

spring.jpa.properties.hibernate.physical_naming_strategy=io.hypersistence.utils.hibernate.naming.CamelCaseToSnakeCaseNamingStrategy

If you’re using Java EE or Jakarta EE, then you can provide the Hibernate Physical Naming Strategy via the persistence.xml property file:

Now, when generating the database schema using the hbm2ll , Hibernate will execute the following DDL statements:

CREATE SEQUENCE hibernate_sequence START WITH 1 INCREMENT BY 1 CREATE TABLE book_author ( id BIGINT NOT NULL, first_name VARCHAR(255), last_name VARCHAR(255), PRIMARY KEY (id) ) CREATE TABLE paper_back_book ( id BIGINT NOT NULL, isbn VARCHAR(255), published_on DATE, title VARCHAR(255), published_by_id BIGINT, PRIMARY KEY (id) )

If you enjoyed this article, I bet you are going to love my Book and Video Courses as well.

Conclusion

While it’s widely known that you can customize the JPA to DB identifier mapping using the name attribute of JPA @Column annotation, using a Hibernate strategy to apply a given naming convention automatically to tens or hundreds of entities is way more convenient.

And, you don’t even have to write the naming strategy yourself since you can get it via the Hypersistence Utils open-source project.

Источник

Оцените статью