Fernando

Fernando

Inserting in a string

Hello, im trying to insert spaces before capitalize letters. For example separarMay(“HelloWorld”) => " Hello World", but instead im getting this => “7210110810811187111114108100” .
This is my aproach:

def separarMay(string) do
string
|> String.to_charlist
|> Enum.reduce(“”,fn(x,acc) → acc <> insertarEspacio(x) end)
end

def insertarEspacio(x) do
x = to_string(x)
if String.match?(x, ~r/[A-Z]/) do
" " <> x
else
x
end
end

Marked As Solved

OvermindDL1

OvermindDL1

I’m unsure why converting from binary to char_list then back again for each character, but why not just regex?

iex> Regex.replace(~r/[A-Z]/, "HelloWorld", " \\0")
" Hello World"

Or are you trying to reduce it for some other reason?

For note, this happens because you are converting it to a charlist, meaning a character is an integer, which you convert an integer back to a binary with your to_string call, which gives you the number, not the character.

Also Liked

mgwidmann

mgwidmann

I think you’ll need to change your accumulator in your reduce (and possibly even write the reduce without Enum.reduce/2). You’ll want to know what the next character is so you know if you need to insert a space or not. Additionally, using a regular expression to check if it is an uppercase is not very performant. I think you’d be better off doing x == String.upcase(x) to check that.

Secondly, your bug which changes everything from letters to numbers is caused by two things. First String.to_charlist/1 returns a list of integers, not binaries (strings). If you want to reduce a string, you should do String.codepoints/1, which will give you a list of strings of a single character (including unicode). Your error comes in when you take an integer like ?a which is 97, and do to_string(97), which produces "97", not "a". This won’t be a problem if you use String.codepoints/1 like I mentioned above.

Fernando

Fernando

I was tryng to check the letters one per one, and reach to that solution . I learn about regular expression yesterday so im very beginner and i didnt read that module yet, i will read now . thx!

Fernando

Fernando

Thx. You are right with the uppercase, i was messing with regex because i learn it recently.

Where Next?

Popular in Questions Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New

Other popular topics Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement