Text between
You are encouraged to solve this task according to the task description, using any language you may know.
- Task
Get the text between a start and end delimiter, which can be the start and end of the string.
Example 1. Both delimiters set Text: "Hello Rosetta Code world" Start delimiter: "Hello " End delimiter: " world" Output: "Rosetta Code"
Example 2. Start delimiter is the start of the string Text: "Hello Rosetta Code world" Start delimiter: "start" End delimiter: " world" Output: "Hello Rosetta Code"
Example 3. End delimiter is the end of the string Text: "Hello Rosetta Code world" Start delimiter: "Hello" End delimiter: "end" Output: "Rosetta Code world"
AppleScript
<lang applescript> my text_between("Hello Rosetta Code world", "Hello ", " world")
on text_between(this_text, start_text, end_text) set return_text to "" try if (start_text is not "start") then set AppleScript's text item delimiters to start_text set return_text to text items 2 thru end of this_text as string else set return_text to this_text end if if (end_text is not "end") then set AppleScript's text item delimiters to end_text set return_text to text item 1 of return_text as string set AppleScript's text item delimiters to "" end if end try set AppleScript's text item delimiters to ""
return return_text end text_between </lang>
C
<lang c> /*
* textBetween: Gets text between two delimiters */
char* textBetween(char* thisText, char* startText, char* endText, char* returnText) { //printf("textBetween\n");
char* startPointer = NULL; int stringLength = 0;
char* endPointer = NULL; int endLength = 0;
if (strstr(startText, "start") != NULL) { // Set the beginning of the string startPointer = thisText; } else { startPointer = strstr(thisText, startText);
if (startPointer != NULL)
{
startPointer = startPointer + strlen(startText); }
} // end if the start delimiter is "start"
if (startPointer != NULL) {
if (strstr(endText, "end") != NULL) { // Set the end of the string endPointer = thisText; endLength = 0; } else { endPointer = strstr(startPointer, endText); endLength = (int)strlen(endPointer); } // end if the end delimiter is "end"
stringLength = strlen(startPointer) - endLength; if (stringLength == 0) {
returnText = ""; startPointer = NULL;
} else {
// Copy characters between the start and end delimiters
strncpy(returnText,startPointer, stringLength);
returnText[stringLength++] = '\0'; }
} else {
//printf("Start pointer not found\n"); returnText = "";
} // end if the start pointer is not found return startPointer;
} // end textBetween method
</lang>
Java
javac textBetween.java java -cp . textBetween "hello Rosetta Code world" "hello " " world"
<lang java> public class textBetween {
/* * textBetween: Get the text between two delimiters */ static String textBetween(String thisText, String startString, String endString) { String returnText = ""; int startIndex = 0; int endIndex = 0; if (startString.equals("start")) { startIndex = 0; } else {
startIndex = thisText.indexOf(startString);
if (startIndex < 0) { return ""; } else { startIndex = startIndex + startString.length(); }
} if (endString.equals("end")) { endIndex = thisText.length(); } else { endIndex = thisText.indexOf(endString); if (endIndex <= 0) { return ""; } else {
} } returnText = thisText.substring(startIndex,endIndex); return returnText; } // end method textBetween
/** * Main method */ public static void main(String[] args) { String thisText = args[0]; String startDelimiter = args[1]; String endDelimiter = args[2]; String returnText = ""; returnText = textBetween(thisText, startDelimiter, endDelimiter); System.out.println(returnText);
} // end method main
} // end class TextBetween </lang>
JavaScript
<lang javascript> function textBetween(thisText, startString, endString) { if (thisText == undefined) { return ""; }
var start_pos = 0; if (startString != 'start') { start_pos = thisText.indexOf(startString);
// If the text does not contain the start string, return a blank string if (start_pos < 0) { return ; }
// Skip the first startString characters start_pos = start_pos + startString.length; }
var end_pos = thisText.length; if (endString != 'end') { end_pos = thisText.indexOf(endString,start_pos); }
// If the text does not have the end string after the start string, return the whole string after the start if (end_pos < start_pos) { end_pos = thisText.length; }
var newText = thisText.substring(start_pos,end_pos);
return newText; } // end textBetween </lang>
PHP
http://localhost/textBetween.php?thisText=hello%20Rosetta%20Code%20world&start=hello%20&end=%20world
<lang php> <?php function text_between($string, $start, $end) {
//$string = " ".$string; $startIndex = strpos($string,$start); if ($start == "start") { $startIndex = 0; } else { if ($startIndex == 0) { return "Start text not found"; } } if ($end == "end") { $endIndex=strlen($string); $resultLength = $endIndex - $startIndex; } else {
$resultLength = strpos($string,$end,$startIndex) - $startIndex; }
if ($start != "start") {
$startIndex += strlen($start); }
if ($resultLength <= 0) { return "End text not found"; } return substr($string,$startIndex,$resultLength);
}
$thisText=$_GET["thisText"]; $startDelimiter=$_GET["start"]; $endDelimiter=$_GET["end"];
$returnText = text_between($thisText, $startDelimiter, $endDelimiter);
print_r($returnText); ?> </lang>
Python
<lang python>
- !/usr/bin/env python
from sys import argv
- textBetween in python
- Get the text between two delimiters
- Usage:
- python textBetween.py "hello Rosetta Code world" "hello " " world"
def textBetween( thisText, startString, endString ):
try: if startString is 'start': startIndex = 0 else: startIndex = thisText.index( startString ) if not (startIndex >= 0): return 'Start delimiter not found' else: startIndex = startIndex + len( startString ) returnText = thisText[startIndex:]
if endString is 'end': return returnText else: endIndex = returnText.index( endString )
if not (endIndex >= 0): return 'End delimiter not found' else: returnText = returnText[:endIndex]
return returnText except ValueError: return "Value error"
script, first, second, third = argv
thisText = first startString = second endString = third
print textBetween( thisText, startString, endString ) </lang>
Ruby
Test <lang ruby> class String
def textBetween startDelimiter, endDelimiter if (startDelimiter == "start") then startIndex = 0 else startIndex = self.index(startDelimiter) + startDelimiter.length end if (startIndex == nil) then return "Start delimiter not found" end thisLength = self.length returnText = self[startIndex, thisLength] if (endDelimiter == "end") then endIndex = thisLength else endIndex = returnText.index(endDelimiter) end if (endIndex == nil) then return "End delimiter not found" end returnText = returnText[0, endIndex] return returnText end
end
thisText = ARGV[0] startDelimiter = ARGV[1] endDelimiter = ARGV[2]
- puts thisText
- puts startDelimiter
- puts endDelimiter
returnText = thisText.textBetween(startDelimiter, endDelimiter)
puts returnText </lang>