Протокол x11 описан в нескольких xml-файлах в проекте xcb . Эти файлы определяют структуры, используемые в клиенте C. Каждая структура содержит типы и имена переменных. Имена переменных имеют две проблемы в java.
- не следуйте правилам нижнего регистра верблюдов
- начните с недопустимых символов (цифр)
При преобразовании этих имен в java я хотел найти существующее решение, которое могло бы сделать это быстро. Одним из преимуществ java является то, что так много проблем уже было решено той или иной библиотекой. Я наткнулся на два проекта, которые помогли мне решить эти проблемы.
implementation group: 'com.google.guava', name: 'guava', version: '29.0-jre' implementation 'pl.allegro.finance:tradukisto:1.8.0'
Guava содержит класс Формат регистра
, который может преобразовываться между соглашениями об именовании в стиле java и c. Для преобразования с c в java:
String converted = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, x11Name)
Это работает для большинства имен, но некоторые элементы перечисления в протоколе начинаются с номера.
8 16 32
Для преобразования этих имен tradukisto можно использовать для первого преобразования числа в слова. Затем можно добавить остальную часть имени.
String startNumbers = x11Name.find('^\\d+') if(startNumbers) { String remainingString = x11Name.substring(startNumbers.length()) String numberWords = ValueConverters.ENGLISH_INTEGER.asWords(startNumbers.toInteger()) .replace('-', ' ') .split(' ').collect{ it.capitalize() }.join('') return numberWords + remainingString }
С Гуавой и традукисто Я могу легко конвертировать имена переменных c в имена переменных java.
Оригинал: “https://dev.to/moaxcp/converting-names-in-c-to-java-4im5”