STEP WEEK 2 LAB PROBLEMS
H R S ARUL
RA2411026010548
AJ-1
1. import [Link];
public class SimpleReplace {
public static String manualReplace(String text, String toFind, String toReplace) {
StringBuilder result = new StringBuilder();
int i = 0;
while (i <= [Link]() - [Link]()) {
if ([Link](i, i + [Link]()).equals(toFind)) {
[Link](toReplace);
i += [Link]();
} else {
[Link]([Link](i));
i++;
}
}
[Link]([Link](i));
return [Link]();
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Enter text: ");
String text = [Link]();
[Link]("Find: ");
String toFind = [Link]();
[Link]("Replace with: ");
String toReplace = [Link]();
String manual = manualReplace(text, toFind, toReplace);
String builtIn = [Link](toFind, toReplace);
[Link]("Manual: " + manual);
[Link]("Built-in: " + builtIn);
[Link]("Match: " + [Link](builtIn));
[Link]();
}
}
2. import [Link];
public class CaseConverter {
static char toUpper(char c) {
return (c >= 'a' && c <= 'z') ? (char)(c - 32) : c;
}
static char toLower(char c) {
return (c >= 'A' && c <= 'Z') ? (char)(c + 32) : c;
}
static String toUpperCase(String s) {
StringBuilder sb = new StringBuilder();
for (char c : [Link]()) [Link](toUpper(c));
return [Link]();
}
static String toLowerCase(String s) {
StringBuilder sb = new StringBuilder();
for (char c : [Link]()) [Link](toLower(c));
return [Link]();
}
static String toTitleCase(String s) {
StringBuilder sb = new StringBuilder();
boolean newWord = true;
for (char c : [Link]()) {
if (c == ' ') {
[Link](c);
newWord = true;
} else {
[Link](newWord ? toUpper(c) : toLower(c));
newWord = false;
}
}
return [Link]();
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Enter text: ");
String input = [Link]();
String upper = toUpperCase(input);
String lower = toLowerCase(input);
String title = toTitleCase(input);
[Link]("\n| Case | Result");
[Link]("|------------|------------------------");
[Link]("| UPPERCASE | " + upper);
[Link]("| lowercase | " + lower);
[Link]("| Title Case | " + title);
[Link]();
}
}
3. import [Link].*;
public class PerfTest {
static long testConcat(int n) {
long t = [Link]();
String s = "";
for (int i = 0; i < n; i++) s += "a";
return [Link]() - t;
}
static long testBuilder(int n) {
long t = [Link]();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) [Link]("a");
return [Link]() - t;
}
static long testBuffer(int n) {
long t = [Link]();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < n; i++) [Link]("a");
return [Link]() - t;
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Iterations: ");
int n = [Link]();
[Link]("\n| Method | Time (ms)");
[Link]("|--------------|-----------");
[Link]("| String | " + testConcat(n));
[Link]("| StringBuilder| " + testBuilder(n));
[Link]("| StringBuffer | " + testBuffer(n));
[Link]();
}
}
4. import [Link].*;
public class CaesarCipher {
static String encrypt(String text, int shift) {
StringBuilder res = new StringBuilder();
for (char c : [Link]()) {
if (c >= 'A' && c <= 'Z')
[Link]((char) ('A' + (c - 'A' + shift) % 26));
else if (c >= 'a' && c <= 'z')
[Link]((char) ('a' + (c - 'a' + shift) % 26));
else [Link](c);
}
return [Link]();
}
static String decrypt(String text, int shift) {
return encrypt(text, 26 - (shift % 26));
}
static void showAscii(String label, String text) {
[Link](label + ": ");
for (char c : [Link]())
[Link]((int) c + " ");
[Link]();
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Enter text: ");
String input = [Link]();
[Link]("Shift value: ");
int shift = [Link]();
String encrypted = encrypt(input, shift);
String decrypted = decrypt(encrypted, shift);
[Link]("\nOriginal: " + input);
showAscii("ASCII", input);
[Link]("Encrypted: " + encrypted);
showAscii("ASCII", encrypted);
[Link]("Decrypted: " + decrypted);
[Link]("Match: " + [Link](decrypted));
[Link]();
}
}
5. import [Link].*;
public class EmailAnalyzer {
static boolean isValid(String email) {
int at = [Link]('@'), atLast = [Link]('@');
if (at == -1 || at != atLast) return false;
String user = [Link](0, at), domain = [Link](at + 1);
int dot = [Link]('.');
return ![Link]() && ![Link]() && dot > 0;
}
static String[] extractParts(String email) {
int at = [Link]('@');
String user = [Link](0, at);
String domain = [Link](at + 1);
int dot = [Link]('.');
String domName = dot > 0 ? [Link](0, dot) : domain;
String ext = dot > 0 ? [Link](dot + 1) : "";
return new String[]{user, domain, domName, ext};
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Enter emails (comma separated): ");
String[] emails = [Link]().split(",");
int validCount = 0, invalidCount = 0, userLenSum = 0;
Map<String, Integer> domainCount = new HashMap<>();
[Link]("Email\tUsername\tDomain\tDomainName\tExtension\tValid");
for (String e : emails) {
e = [Link]();
boolean valid = isValid(e);
if (valid) {
validCount++;
String[] parts = extractParts(e);
userLenSum += parts[0].length();
[Link](parts[1], [Link](parts[1], 0) + 1);
[Link]("%s\t%s\t%s\t%s\t%s\t%s\n", e, parts[0], parts[1], parts[2],
parts[3], "Yes");
} else {
invalidCount++;
[Link]("%s\t%s\n", e, "Invalid");
}
}
String mostCommonDomain = [Link]().stream()
.max([Link]())
.map([Link]::getKey).orElse("N/A");
double avgUserLen = validCount > 0 ? (double) userLenSum / validCount : 0;
[Link]("\nSummary:");
[Link]("Valid emails: " + validCount);
[Link]("Invalid emails: " + invalidCount);
[Link]("Most common domain: " + mostCommonDomain);
[Link]("Average username length: %.2f\n", avgUserLen);
[Link]();
}
}
6. import [Link].*;
public class TextFormatter {
static String[] getWords(String text) {
ArrayList<String> words = new ArrayList<>();
int start = 0;
for (int i = 0; i <= [Link](); i++) {
if (i == [Link]() || [Link](i) == ' ') {
if (i > start) [Link]([Link](start, i));
start = i + 1;
}
}
return [Link](new String[0]);
}
static List<String> justifyLeft(String[] words, int width) {
List<String> lines = new ArrayList<>();
StringBuilder line = new StringBuilder();
int count = 0;
int last = 0;
for (int i = 0; i < [Link]; i++) {
if (count + words[i].length() + (i - last) > width) {
int spaces = width - count;
int gaps = i - last - 1;
StringBuilder sb = new StringBuilder();
if (gaps == 0) {
[Link](words[last]);
for (int s = 0; s < spaces; s++) [Link](' ');
} else {
int even = spaces / gaps;
int extra = spaces % gaps;
for (int w = last; w < i - 1; w++) {
[Link](words[w]);
for (int s = 0; s < even + (w - last < extra ? 1 : 0); s++) [Link](' ');
}
[Link](words[i - 1]);
}
[Link]([Link]());
count = 0;
last = i;
}
count += words[i].length();
}
StringBuilder lastLine = new StringBuilder();
for (int i = last; i < [Link]; i++) {
if (i > last) [Link](' ');
[Link](words[i]);
}
for (int s = [Link](); s < width; s++) [Link](' ');
[Link]([Link]());
return lines;
}
static List<String> centerAlign(List<String> lines, int width) {
List<String> centered = new ArrayList<>();
for (String line : lines) {
int padding = (width - [Link]().length()) / 2;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < padding; i++) [Link](' ');
[Link]([Link]());
while ([Link]() < width) [Link](' ');
[Link]([Link]());
}
return centered;
}
static long timeStringBuilder(String[] words, int width) {
long start = [Link]();
justifyLeft(words, width);
return [Link]() - start;
}
static long timeStringConcat(String[] words, int width) {
long start = [Link]();
List<String> lines = new ArrayList<>();
int count = 0, last = 0;
for (int i = 0; i < [Link]; i++) {
if (count + words[i].length() + (i - last) > width) {
int spaces = width - count;
int gaps = i - last - 1;
String line = "";
if (gaps == 0) {
line = words[last];
for (int s = 0; s < spaces; s++) line += " ";
} else {
int even = spaces / gaps;
int extra = spaces % gaps;
for (int w = last; w < i - 1; w++) {
line += words[w];
for (int s = 0; s < even + (w - last < extra ? 1 : 0); s++) line += " ";
}
line += words[i - 1];
}
[Link](line);
count = 0;
last = i;
}
count += words[i].length();
}
String lastLine = "";
for (int i = last; i < [Link]; i++) {
if (i > last) lastLine += " ";
lastLine += words[i];
}
while ([Link]() < width) lastLine += " ";
[Link](lastLine);
return [Link]() - start;
}
static void display(List<String> lines) {
for (int i = 0; i < [Link](); i++)
[Link]("%2d: %s | %d chars\n", i + 1, [Link](i), [Link](i).length());
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Enter text: ");
String text = [Link]();
[Link]("Line width: ");
int width = [Link]();
String[] words = getWords(text);
[Link]("\nLeft Justified:");
List<String> left = justifyLeft(words, width);
display(left);
[Link]("\nCenter Aligned:");
List<String> center = centerAlign(left, width);
display(center);
long sbTime = timeStringBuilder(words, width);
long strTime = timeStringConcat(words, width);
[Link]("\nPerformance:\nStringBuilder: %d ns\nString concat: %d ns\n",
sbTime, strTime);
[Link]();
}
}