In Intellij, how do I toggle between camel case and underscore spaced?

JavaCoding StyleIntellij Idea

Java Problem Overview


At my company we have two different style guides for java vs sql. In java I have a field named historyOfPresentIllness and when i write the sql, I want to name it history_of_present_illness. Is there a keyboard shortcut to switch from one to the other when I have the phrase highlighted? Or perhaps a plugin that can do this?

While I'm asking, I may as well ask if there's a way to turn historyOfPresentIllness to history-of-present-illness. That's from java to clojure style.

Java Solutions


Solution 1 - Java

Two plugins offer this feature:

I use a plugin called String Manipulation which does what you need (and more).

Select historyOfPresentIllness and press Alt / option+M to bring up the plugin menu, then press:

  • 5 - To snake_case (or to camelCase) which converts to history_of_present_illness
  • 6 - To hyphen-case (or to snake_case) which converts to history-of-present-illness

To make this easier, you could set up a shortcut at File | Settings | Keymap.


There also is the CamelCase plugin.

SHIFT+Alt / option+U toggles the selection between formats:

historyOfPresentIllness --> history_of_present_illness --> HISTORY_OF_PRESENT_ILLNESS --> HistoryOfPresentIllness --> historyOfPresentIllness

You can also undo your changes (now that a bug in the plugin got fixed).

Solution 2 - Java

Very simple press Clr + F to open Find/Replace panel and check [✓] Regex copy past regex

Find: [_]{1,1}([a-z])

Replace: \U$1

Press [Replace all] button, Enjoy


Thanks @piotrek for _some_awe_var to _someAweVar

Use Find: (\w)[_]{1,1}([a-z])
Replace: $1\U$2

Solution 3 - Java

From snake_case to CamelCase

  • Find: (\w)[_]{1,1}([a-z])
  • Replace: $1\U$2
  • Settings:
    • Match Case
    • Regex

From CamelCase to snake_case:

  • Find: ([A-Z])
  • Replace: \_\L$1
  • Settings:
    • Match Case
    • Regex

Solution 4 - Java

If you are OK with PyCharm also refactoring usages, launch the "Rename" tool (Refactor > Rename). The window pops up with drop down list and you should see the snake_case version of the text in the list (you can open the window and switch to the snake_case with key-strokes so it can be pretty fast).

Solution 5 - Java

Answer above is almost perfect, but note that it will change variables like _something or this._something into Something and this.Something. I didn't want that in my case, as leading _ was used to denote "private" variables (old JS project). I slightly modified this approach:

Find: (\w)[_]{1,1}([a-z])

Replace: $1\U$2

This will ensure that only variables with _ is in the middle will be affected.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaniel KaplanView Question on Stackoverflow
Solution 1 - JavaDannyMoView Answer on Stackoverflow
Solution 2 - JavaQamarView Answer on Stackoverflow
Solution 3 - JavaTheodore R. SmithView Answer on Stackoverflow
Solution 4 - JavaRafeView Answer on Stackoverflow
Solution 5 - JavapiotrekView Answer on Stackoverflow