marcel_maro
marcel_maro

Reputation: 85

How to arrange string in kotlin by the numbers?

I have string with text and numbers like this for example

var text = "1 Hello world 2 how are you 3 im fine here"

How i can make it start new line by every number?? Like this

1 Hello world
2 how are you
3 I'm fine 

And That is the text var my_text = "1 فِي الْبَدْءِ خَلَقَ اللهُ السَّمَاوَاتِ وَالأَرْضَ. 2 وَكَانَتِ الأَرْضُ خَرِبَةً وَخَالِيَةً، وَعَلَى وَجْهِ الْغَمْرِ ظُلْمَةٌ، وَرُوحُ اللهِ يَرِفُّ عَلَى وَجْهِ الْمِيَاهِ. 3 وَقَالَ اللهُ: «لِيَكُنْ نُورٌ»، فَكَانَ نُورٌ. 4 وَرَأَى اللهُ النُّورَ أَنَّهُ حَسَنٌ. وَفَصَلَ اللهُ بَيْنَ النُّورِ وَالظُّلْمَةِ. 5 وَدَعَا اللهُ النُّورَ نَهَارًا، وَالظُّلْمَةُ دَعَاهَا لَيْلاً. وَكَانَ مَسَاءٌ وَكَانَ صَبَاحٌ يَوْمًا وَاحِدًا. 6 وَقَالَ اللهُ: «لِيَكُنْ جَلَدٌ فِي وَسَطِ الْمِيَاهِ. وَلْيَكُنْ فَاصِلاً بَيْنَ مِيَاهٍ وَمِيَاهٍ». 7 فَعَمِلَ اللهُ الْجَلَدَ، وَفَصَلَ بَيْنَ الْمِيَاهِ الَّتِي تَحْتَ الْجَلَدِ وَالْمِيَاهِ الَّتِي فَوْقَ الْجَلَدِ. وَكَانَ كَذلِكَ. 8 وَدَعَا اللهُ الْجَلَدَ سَمَاءً. وَكَانَ مَسَاءٌ وَكَانَ صَبَاحٌ يَوْمًا ثَانِيًا. 9 وَقَالَ اللهُ: «لِتَجْتَمِعِ الْمِيَاهُ تَحْتَ السَّمَاءِ إِلَى مَكَانٍ وَاحِدٍ، وَلْتَظْهَرِ الْيَابِسَةُ». وَكَانَ كَذلِكَ. 10 وَدَعَا اللهُ الْيَابِسَةَ أَرْضًا، وَمُجْتَمَعَ الْمِيَاهِ دَعَاهُ بِحَارًا. وَرَأَى اللهُ ذلِكَ أَنَّهُ حَسَنٌ. "

Just for the info:the text is in sqlite database and I want to show it in android text view

Upvotes: 2

Views: 221

Answers (4)

voddan
voddan

Reputation: 33829

This is a combination of @RandallFlagg's and @user3357604's answers and it does literally what was asked for, possible more efficently:

val text = "1 فِي الْبَدْءِ خَلَقَ اللهُ السَّمَاوَاتِ وَالأَرْضَ. 2 وَكَانَتِ الأَرْضُ خَرِبَةً وَخَالِيَةً، وَعَلَى وَجْهِ الْغَمْرِ ظُلْمَةٌ، وَرُوحُ اللهِ يَرِفُّ عَلَى وَجْهِ الْمِيَاهِ. 3 وَقَالَ اللهُ: «لِيَكُنْ نُورٌ»، فَكَانَ نُورٌ. 4 وَرَأَى اللهُ النُّورَ أَنَّهُ حَسَنٌ. وَفَصَلَ اللهُ بَيْنَ النُّورِ وَالظُّلْمَةِ. 5 وَدَعَا اللهُ النُّورَ نَهَارًا، وَالظُّلْمَةُ دَعَاهَا لَيْلاً. وَكَانَ مَسَاءٌ وَكَانَ صَبَاحٌ يَوْمًا وَاحِدًا.6 وَقَالَ اللهُ: «لِيَكُنْ جَلَدٌ فِي وَسَطِ الْمِيَاهِ. وَلْيَكُنْ فَاصِلاً بَيْنَ مِيَاهٍ وَمِيَاهٍ». 7 فَعَمِلَ اللهُ الْجَلَدَ، وَفَصَلَ بَيْنَ الْمِيَاهِ الَّتِي تَحْتَ الْجَلَدِ وَالْمِيَاهِ الَّتِي فَوْقَ الْجَلَدِ. وَكَانَ كَذلِكَ. 8 وَدَعَا اللهُ الْجَلَدَ سَمَاءً. وَكَانَ مَسَاءٌ وَكَانَ صَبَاحٌ يَوْمًا ثَانِيًا.9 وَقَالَ اللهُ: «لِتَجْتَمِعِ الْمِيَاهُ تَحْتَ السَّمَاءِ إِلَى مَكَانٍ وَاحِدٍ، وَلْتَظْهَرِ الْيَابِسَةُ». وَكَانَ كَذلِكَ. 10 وَدَعَا اللهُ الْيَابِسَةَ أَرْضًا، وَمُجْتَمَعَ الْمِيَاهِ دَعَاهُ بِحَارًا. وَرَأَى اللهُ ذلِكَ أَنَّهُ حَسَنٌ. "

val res = text.replace(Regex("""(\d+)\s""")) { match -> 
    val (num) = match.destructured 
    "\n$num "
}

println(res)

Upvotes: 2

Krzysztof Atłasik
Krzysztof Atłasik

Reputation: 22635

You can just split this string by regex.

One option would be to use \\s(?=\\d+), which will match whitespace character followed by any number of digits. For example:

val str = "1 Hello world 2 how are you 3 im fine here"

val r = str.split("\\s(?=\\d+)".toRegex())

r.forEach(::println)

and then to create one string with newlines use joinToString:

println(r.joinToString("\n"))

Upvotes: 3

j-p
j-p

Reputation: 3828

Try this ..use '< br >' instead of '\n' if kotlin doesn't like it

example string

str = '1 one 2 two, two and a half, 3 three and four and five';
console.log(str); 

-- 
1 one 2 two, two and a half, 3 three and four and five

example solution

str2 = str.replace(/.(?=[0-9]\s)/gi, '\n');
console.log(str2); 

--
1 one 
2 two, two and a half, 
3 three and four and five

Upvotes: -1

user4571931
user4571931

Reputation:

I have used one kotlin method to remove whitespace with trimMargin() function and By default | is used as margin prefix.

        var text = """|1 Hello world
                |2 how are you
                |3 im fine here""".trimMargin()
    println(text)

Upvotes: 1

Related Questions